对服务器的请求:iOS的NSMutableURLRequest有效,但Android的HttpPost无效
我知道这是一个非常本地化的问题,但我真的不知道我在这个Android请求中犯了什么错误,只是试图向服务器发送一些数据 首先,这是我在iOS应用程序中所做的工作。该应用程序运行良好:对服务器的请求:iOS的NSMutableURLRequest有效,但Android的HttpPost无效,android,ios,http-post,nsmutableurlrequest,Android,Ios,Http Post,Nsmutableurlrequest,我知道这是一个非常本地化的问题,但我真的不知道我在这个Android请求中犯了什么错误,只是试图向服务器发送一些数据 首先,这是我在iOS应用程序中所做的工作。该应用程序运行良好: NSString *string = @"param1=val1¶m2=val2¶m3=val3"; NSData *postData = [string dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:
NSString *string = @"param1=val1¶m2=val2¶m3=val3";
NSData *postData = [string dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:myURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:cookieSet forHTTPHeaderField:@"Set-Cookie"];
[request setValue:@"text/html" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
connEnvoi = [NSURLConnection connectionWithRequest:request delegate:self];
没什么了,它工作得很好,按照服务器的预期返回1
现在我用我的Android应用程序做的,当然是同一台服务器:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(myURL);
httppost.addHeader("Content-Type", "application/x-www-form-urlencoded");
httppost.addHeader("Accept", "text/html");
httppost.addHeader("Set-Cookie", sessionCookie);
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("param1", "val1"));
postParameters.add(new BasicNameValuePair("param2", "val2"));
postParameters.add(new BasicNameValuePair("param3", "val3"));
httppost.setEntity(new UrlEncodedFormEntity(postParameters));
BasicResponseHandler brh = new BasicResponseHandler();
String responseBody = httpclient.execute(httppost, brh);
而responseBody每次都返回0。。。我真的不知道我做错了什么
若你们想知道为什么,我并没有在我的Android请求中设置Content Length头,因为这会让我得到一个ClientProtocolException
非常感谢您的帮助。这可能会为您节省一些时间: 您只需在项目中删除这个类,它就可以毫不费力地完成HTTP post。您的代码将如下所示:
Map<String, String> params = new HashMap<String, String>();
params.put("param1", "val1");
params.put("param2", "val2");
params.put("param3", "val3");
String response = HttpRequest.post(url, params, true).body();
如果您需要,还可以通过一些方法获取HTTP响应代码、原始流等,但body提供了字符串内容。此外,gzip压缩支持、忽略连接错误等也很容易添加到方法链中。这是真的,感谢这个链接,但是有些东西仍然不起作用,我在Android上得到的结果是0。。。