`
wangjie2013
  • 浏览: 172724 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

新浪微博登录遇到的问题:在获取code抛出异常WeiboException

阅读更多

 

    Lost modified:2013-10-10 14:17:35

    **********************************************

    今天测试突然发来文档说有时使用微博登录时会出500错误。查看了后台的代码抛出的异常如下:

2013-10-10 09:54:32 ERROR [WeiboLogin.java:89] cc.com.pinche.web.controller.WeiboLogin.loginBySinaWeibo() - 新浪微博错误
weibo4j.model.WeiboException: localhost.hao231: localhost.hao231
	at weibo4j.http.HttpClient.httpRequest(HttpClient.java:422)
	at weibo4j.http.HttpClient.httpRequest(HttpClient.java:371)
	at weibo4j.http.HttpClient.get(HttpClient.java:203)
	at weibo4j.Users.showUserById(Users.java:28)
	at cc.com.pinche.web.controller.WeiboLogin.loginBySinaWeibo(WeiboLogin.java:87)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.UnknownHostException: localhost.hao231: localhost.hao231
	at java.net.InetAddress.getLocalHost(InetAddress.java:1360)
	at weibo4j.http.HttpClient.httpRequest(HttpClient.java:379)
	... 37 more
weibo4j.model.WeiboException: localhost.hao231: localhost.hao231
	at weibo4j.http.HttpClient.httpRequest(HttpClient.java:422)
	at weibo4j.http.HttpClient.httpRequest(HttpClient.java:371)
	at weibo4j.http.HttpClient.get(HttpClient.java:203)
	at weibo4j.Users.showUserById(Users.java:28)
	at cc.com.pinche.web.controller.WeiboLogin.loginBySinaWeibo(WeiboLogin.java:87)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.UnknownHostException: localhost.hao231: localhost.hao231
	at java.net.InetAddress.getLocalHost(InetAddress.java:1360)
	at weibo4j.http.HttpClient.httpRequest(HttpClient.java:379)
	... 37 more

 

    查看错误提示的message很特殊是我服务器的名字localhost.hao231,在新浪微博论坛发现也有很很多人遇到这样的问题。

 

 

    首先来说说解决方法:

    1.若你部署再linux,那么你先获取下机器主机名:通过命令:hostname,其实在异常UnknownHostException:后面已经显示了你的机器名(我的就是localhost.hao231).

    2.接着在/etc/hosts中配置相应的loopback(回环地址),添加如下:

       127.0.0.1 localhost 

       127.0.0.1 localhost.hao231

      (当然你也可以这样添加 : www.example.com(你的网站域名)  localhost.hao231)

   

    解决问题的关键就是:Caused by: java.net.UnknownHostException

    新浪weibo4j.http.HttpClient.java的源码摘录如下:

 

public Response httpRequest(HttpMethod method, Boolean WithTokenHeader)
			throws WeiboException {
		InetAddress ipaddr;
		int responseCode = -1;
		try {
			ipaddr = InetAddress.getLocalHost();//UnknownHostException就是在这里抛出的,在向新浪发送请求时获取了请求端服务器的ip或 host name 
			List<Header> headers = new ArrayList<Header>();
			if (WithTokenHeader) {
				if (token == null) {
					throw new IllegalStateException("Oauth2 token is not set!");
				}
				headers.add(new Header("Authorization", "OAuth2 " + token));
				headers.add(new Header("API-RemoteIP", ipaddr.getHostAddress()));
				client.getHostConfiguration().getParams()
						.setParameter("http.default-headers", headers);
				for (Header hd : headers) {
					log(hd.getName() + ": " + hd.getValue());
				}
			}

			method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
					new DefaultHttpMethodRetryHandler(3, false));
			client.executeMethod(method);
			Header[] resHeader = method.getResponseHeaders();
			responseCode = method.getStatusCode();
			log("Response:");
			log("https StatusCode:" + String.valueOf(responseCode));

			for (Header header : resHeader) {
				log(header.getName() + ":" + header.getValue());
			}
			Response response = new Response();
			response.setResponseAsString(method.getResponseBodyAsString());
			log(response.toString() + "\n");

			if (responseCode != OK)

			{
				try {
					throw new WeiboException(getCause(responseCode),
							response.asJSONObject(), method.getStatusCode());
				} catch (JSONException e) {
					e.printStackTrace();
				}
			}
			return response;

		} catch (IOException ioe) {
			throw new WeiboException(ioe.getMessage(), ioe, responseCode);
		} finally {
			method.releaseConnection();
		}

	}

    

  getLocalHost()方法介绍:

 

    Returns the local host.

If there is a security manager, its checkConnect method is called with the local host name and -1 as its arguments to see if the operation is allowed. If the operation is not allowed, an InetAddress representing the loopback address is returned.

Returns:
the IP address of the local host.
Throws:
UnknownHostException - if no IP address for the host could be found.
See Also:
SecurityManager.checkConnect

 

2
0
分享到:
评论

相关推荐

    新浪应用开发:使用新浪微博API发一条微博

    使用新浪微博API发一条微博 第一步:先下载安装配置了JAVA环境,然后下载myecplise10。 第二步:在新浪微博API网页找到并下载针对JAVA的SDK, http://code.google.com/p/weibo4j/ 第三步:申请成为开发者,新建...

    新浪微博登录网站

    标题“新浪微博登录网站”指的是利用新浪开放平台提供的API接口实现用户在个人网站上通过微博账号进行登录的功能。在这个过程中,开发者需要对微博的OAuth 2.0授权协议有深入理解,以便安全、有效地获取用户的授权...

    ECSHOP 新浪微博登录

    在ECSHOP中集成新浪微博登录功能,能够为用户提供便捷的社交账号登录体验,增加网站的用户友好性和互动性。以下将详细介绍ECSHOP如何实现新浪微博登录以及涉及的相关知识点。 1. **OAuth2.0授权框架**: 微博开放...

    新浪微博后台登录授权认证

    在实现登录前,你需要在新浪微博开放平台上注册你的应用,获取App Key(客户端ID)和App Secret(客户端密钥)。这两个参数在后续的授权流程中至关重要。 2. **授权流程**: - **授权请求**:前端通过重定向用户...

    最新JAVA调用新浪微博API之发微博、发图片

    weibo4j-oauth2库会抛出相关的异常,如WeiboException,需要捕获并根据错误码做相应的处理。 此外,为了保持用户登录状态,开发者通常会将Access Token存储在数据库中,每次需要调用API时都先检查Token是否有效,...

    新浪微博php sdk文件

    在新浪微博PHP SDK中,我们主要会用到授权码模式(Authorization Code Grant)来获取用户的授权,然后通过授权码换取访问令牌,从而实现安全的登录流程。 使用新浪微博PHP SDK的步骤如下: 1. **注册应用**:首先...

    实现新浪微博自动登录授权

    模拟新浪微博桌面客户端应用自动授权功能,为写应用打开第一步锁。自动获取CODE并授权于应用。

    新浪微博登录代码实现

    在本文中,我们将深入探讨如何实现新浪微博的代码登录,并理解其背后的原理和技术细节。通过登录微博,我们可以获取必要的Cookie信息,以便在后续的HTTP请求中模拟已登录状态,访问受保护的用户页面。 首先,我们...

    新浪微博联合登录

    新浪微博开放平台提供了基于OAuth2.0的授权机制,允许第三方应用获取用户的授权,以便进行登录或其他操作。OAuth2.0是一种广泛使用的授权框架,它确保了用户信息安全的同时,也让开发者能够轻松获取必要的访问令牌。...

    友盟微信 QQ 新浪微博登录jar包

    在本案例中,"友盟微信 QQ 新浪微博登录jar包"是友盟提供的一套集成解决方案,允许开发者快速实现这三个主流社交平台的单点登录功能。 1. **微信登录**: 微信登录是通过微信开放平台实现的,友盟的jar包简化了这...

    新浪微博爬虫,用python爬取新浪微博数据,并下载微博图片和微博视频.zip

    3. **异常处理**:在爬取过程中,可能会遇到各种异常,如网络错误、编码问题等,需要编写合适的异常处理代码,确保程序在遇到问题时能优雅地退出或重试。 4. **数据存储**:抓取到的数据通常会存储为文本文件、...

    ecms7.0新浪微博登录接口GBK/UTF-8版

    7. **错误处理与调试**:在实际部署和使用过程中,可能会遇到授权失败、网络问题等各种异常情况,需要有完善的错误处理机制,并进行充分的测试。 通过上述过程,"ecms7.0新浪微博登录接口GBK/UTF-8版"实现了让帝国...

    新浪微博登陆开发流程 宋正河整理

    《新浪微博登录开发流程详解》 在互联网应用中,微博作为一种重要的社交平台,其登录功能的开发对于开发者来说是一项必备技能。本文将详细讲解由宋正河整理的新浪微博登录开发流程,帮助开发者理解并掌握这一过程。...

    ios 新浪微博分享

    在iOS应用开发中,集成新浪微博分享功能是一项常见的需求,它可以让用户方便地将内容发布到自己的新浪微博账号上,增加应用的互动性和用户粘性。本文将深入探讨如何在iOS项目中实现新浪微博分享,主要涉及以下几个...

    新浪微博第三方登录授权

    本教程将详细介绍如何在Android应用中实现新浪微博的第三方登录授权。通过这个过程,开发者可以让用户使用他们在新浪微博的账户来快速注册或登录到自己的应用程序,提高用户体验。 首先,我们需要了解的是OAuth 2.0...

    新浪微博授权登录代码

    2. **重定向授权**:用户在应用中点击“用微博登录”时,应用会跳转到新浪的授权页面,用户同意授权后,新浪会将授权码(code)通过回调URL返回给应用。 3. **换取Access Token**:应用收到code后,通过HTTP POST...

    第三方登陆 qq 新浪微博

    开发者需要在微博开放平台注册应用,获取App Key和App Secret,设置回调URL,然后在应用中调用SDK进行登录操作。成功登录后,开发者可以获得用户的微博昵称、头像、uid等信息。 3. **OAuth2.0协议**:OAuth2.0是一...

    新浪微博 授权 分享 代码实例和文档

    在Android平台上进行新浪微博的授权与分享,是移动应用开发者经常遇到的需求。本资源"新浪微博 授权 分享 代码实例和文档"提供了一整套实际运行流程的实例代码和相关文档,帮助开发者更好地理解和实现这一功能。 一...

    新浪微博2模拟登陆

    今天我们将聚焦于“新浪微博2模拟登陆”这一主题,学习如何通过编程方式模拟登录并获取AccessToken,以便进行自动化操作或者数据分析。 首先,我们需要了解什么是模拟登陆。模拟登陆是指通过编程代码来模拟用户在...

    新浪微博OAuth2.0登录

    总之,通过C# MVC框架实现新浪微博OAuth2.0登录,需要理解OAuth2.0协议的工作原理,正确配置应用并在MVC项目中实现关键的登录逻辑。通过这个过程,开发者不仅可以掌握OAuth2.0的实现,还能深入理解第三方登录的流程...

Global site tag (gtag.js) - Google Analytics