我正在尝试自动发送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=/]
答案 0 :(得分:2)
您可以通过CURL甚至浏览器发出请求,始终手动验证这是否正确。例如,在浏览器位置栏中键入https://www.hautelook.com/v3/credential
会导致重定向到https://www.hautelook.com
(jQuery会显示一个很好的小登录对话框)。所以你至少知道,行为是一致的。
这可能意味着以下几点之一:
如果不了解更多关于API的信息很难说,但是您应该再次查阅文档以确保正确拨打电话。
*编辑*
好的,使用REST客户端进行了测试,并且在您的代码中需要纠正一些事项:
原件:
new StringEntity( "JSON: " + json.toString())
要:
new StringEntity(json.toString())
这应该允许请求通过,虽然我仍然不确定这是正确的端点,因为我得到了一个HTML页面。最后一点,在将代码发布到SO之前,最好删除您的API凭据。我在下面提供了请求的屏幕截图:
答案 1 :(得分:1)
HttpClient 4.x使用的默认重定向策略遵循HTTP规范强加的实体封闭方法(如POST和PUT)的自动重定向限制。在没有用户明确确认的情况下,对于POST和PUT方法,可能无法自动处理HTTP规范302 Moved Temporarily
,301 Moved Permanently
和307 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?