Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对服务器的请求:iOS的NSMutableURLRequest有效,但Android的HttpPost无效_Android_Ios_Http Post_Nsmutableurlrequest - Fatal编程技术网

对服务器的请求:iOS的NSMutableURLRequest有效,但Android的HttpPost无效

对服务器的请求:iOS的NSMutableURLRequest有效,但Android的HttpPost无效,android,ios,http-post,nsmutableurlrequest,Android,Ios,Http Post,Nsmutableurlrequest,我知道这是一个非常本地化的问题,但我真的不知道我在这个Android请求中犯了什么错误,只是试图向服务器发送一些数据 首先,这是我在iOS应用程序中所做的工作。该应用程序运行良好: NSString *string = @"param1=val1&param2=val2&param3=val3"; NSData *postData = [string dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:

我知道这是一个非常本地化的问题,但我真的不知道我在这个Android请求中犯了什么错误,只是试图向服务器发送一些数据

首先,这是我在iOS应用程序中所做的工作。该应用程序运行良好:

NSString *string = @"param1=val1&param2=val2&param3=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。。。