After sending HTTP request to server sometimes I get status 302 (redirect)
我尝试使用 json 参数向某些服务器发送
在 Android 上它工作正常,但在 Linux 上我得到状态
这是来自 linux 的命令:
curl -i -X POST --data"id=105&json={"orderBy":0"maxResults":50}" "http://mysite.com/ctlClient/"
我得到回应:
1 2 3 4 5 6 7 8 9 10 11 12 | HTTP/1.1 302 Found Date: Thu, 04 Jul 2013 12:22:06 GMT Server: Apache X-Powered-By: PHP/5.3.19 Set-Cookie: PHPSESSID=dqblvijvttgsdrv2u5tn72p9d6; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache location: http://mysite.com/fwf/online/ Content-Length: 0 Connection: close Content-Type: text/html |
从服务器
"POST /ctlClient/ HTTP/1.1" 302 -"-""curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5"
安卓:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | String data ="{"orderBy":0"maxResults":50}"; String WEFI_MAIL_URL ="http://mysite.com/ctlClient/"; DefaultHttpClient httpclient = null; String out = null; try { httpclient = new DefaultHttpClient(); HttpPost httpost = new HttpPost(WEFI_MAIL_URL); httpost.setHeader("User-Agent","Apache-HttpClient/4.1 (java 1.5)"); List <NameValuePair> nvps = new ArrayList <NameValuePair>(); nvps.add(new BasicNameValuePair("id","105")); nvps.add(new BasicNameValuePair("json", data)); httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); HttpResponse response = httpclient.execute(httpost); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream is = entity.getContent(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line = null; while ( (line = br.readLine()) != null) { out = line; } is.close(); if(isTimeOut == false){ _loadActual(); } else{ return; } } else { return; } } catch (Exception e) { } if (httpclient != null) { httpclient.getConnectionManager().shutdown(); } } |
1 2 | "POST /ctlClient/ HTTP/1.1" 302 -"-""Apache-HttpClient/4.1 (java 1.5)" "GET /fwf/online/ HTTP/1.1" 200 13981"-""Apache-HttpClient/4.1 (java 1.5)" |
我们可以看到在 POST 服务器上将我重定向到
从 Wireshark 我得到了两种方法相同的结果:
1 2 3 4 5 6 | POST /ctlClient/ HTTP/1.1 User-Agent: Apache-HttpClient/4.1 (java 1.5) Content-Type: application/x-www-form-urlencoded Content-Length: 301 Host: mysite.com Connection: Keep-Alive |
为什么它可以在 Android 上运行,但不能在带有 CURL 的 Linux 上运行?
谁能帮助我或指导我如何解决它?
谢谢
您想将 -L 添加到您的 curl 命令中。请参阅 http://curl.haxx.se/docs/faq.html#How_do_I_tell_curl_to_follow_HTT。