Httpclient / JSONObject

时间:2012-02-16 19:16:37

标签: java json httpclient autologin

我正在尝试自动发送JSONObject。我把reposnse当作302 Moved Temporarily,这意味着我应该重定向到另一个url。但我的response.toString()显示“Location:/”。以下是代码。

String input_text = "https://www.hautelook.com/v3/credential";
HttpPost httpost = new HttpPost(input_text);
String data =  "{\"screen_resolution\":{\"height\":1080,\"width\":1920}}";

JSONObject jo=new JSONObject();
jo.put("email","sfhgfjk");
jo.put("passsword","dfjhsdkj");
jo.put("meta",data);

StringEntity se = new StringEntity( "JSON: " + json.toString());  
se.setContentEncoding("UTF-8");
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpost.setEntity(se);

HttpResponse  response = httpclient.execute(httpost);
entity  = response.getEntity();

会出现什么问题?

这是回复。

response HTTP/1.1 302 Moved Temporarily [Server: nginx, Content-Type: text/html,
 Location: /, Content-Encoding: gzip, Content-Length: 20, Expires: Thu, 16 Feb 2
012 19:07:55 GMT, Cache-Control: max-age=0, no-cache, no-store, Pragma: no-cache
, Date: Thu, 16 Feb 2012 19:07:55 GMT, Connection: keep-alive, Set-Cookie: PHPSE
SSID=vmoqeksits8ccukvnf7k4rdv75; path=/]

4 个答案:

答案 0 :(得分:2)

您可以通过CURL甚至浏览器发出请求,始终手动验证这是否正确。例如,在浏览器位置栏中键入https://www.hautelook.com/v3/credential会导致重定向到https://www.hautelook.com(jQuery会显示一个很好的小登录对话框)。所以你至少知道,行为是一致的。

这可能意味着以下几点之一:

  • 您使用的端点不正确(这可能不是 情况下)
  • 您提供的身份验证信息不正确(同样 不太可能,因为在这种情况下我们会期望401未经授权)
  • 传递身份验证信息的方式不正确。

如果不了解更多关于API的信息很难说,但是您应该再次查阅文档以确保正确拨打电话。


*编辑*

好的,使用REST客户端进行了测试,并且在您的代码中需要纠正一些事项:

  • 将'密码'更改为'密码'
  • 更改行:

原件:

new StringEntity( "JSON: " + json.toString())

要:

new StringEntity(json.toString())

这应该允许请求通过,虽然我仍然不确定这是正确的端点,因为我得到了一个HTML页面。最后一点,在将代码发布到SO之前,最好删除您的API凭据。我在下面提供了请求的屏幕截图:

enter image description here

答案 1 :(得分:1)

HttpClient 4.x使用的默认重定向策略遵循HTTP规范强加的实体封闭方法(如POST和PUT)的自动重定向限制。在没有用户明确确认的情况下,对于POST和PUT方法,可能无法自动处理HTTP规范302 Moved Temporarily301 Moved Permanently307 Temporary Redirect状态代码的每个要求。

HttpClient 4.2可以配置为使用LaxRedirectStrategy自动处理所有类型的重定向,而不管规范施加的限制。对于早期版本,可以实现如下所述的自定义重定向策略:Httpclient 4, error 302. How to redirect?(由Bob Kuhar建议)。

同时我不得不说'Location: /'标题看起来有点可疑,甚至自动重定向到该位置可能不一定产生预期的效果。

答案 2 :(得分:0)

响应HTTP / 1.1 302暂时移动意味着发生了一些重定向。

其中一个示例案例是,需要单点登录(或)授权。当您尝试使用URL访问资源时,如果没有授权cookie,您可能会被重定向到Authorization,响应为302.

答案 3 :(得分:0)

您可以将HTTPClient配置为遵循重定向。在4.x之前,它只是HTTPMethod上的一个方法。添加...

HttpPost httpost = new HttpPost(input_text);
httpost.setFollowRedirect( true );

...但这不够纯粹或者什么,他们在4.x中改变了它。我没有尝试过,因此我不愿意发布代码。但是这个问题已经提出并在此之前得到了回答。也许这有助于你? Httpclient 4, error 302. How to redirect?