[英]REST NSMutableURLRequest with httpmethod PUT or DELETE
POST请求一切正常,但是找不到使用PUT或DELETE的方法吗?
NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] init];
[mutableRequest setURL:[NSURL URLWithString:[NSString
stringWithFormat:@"http://abc.com/update/27"]]];
[mutableRequest setHTTPMethod:@"PUT"];
[mutableRequest addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[mutableRequest addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[mutableRequest addValue:@"PUT" forHTTPHeaderField:@"X-HTTP-Method-Override"];
[mutableRequest addValue:sessionId forHTTPHeaderField:@"ZURMO_SESSION_ID"];
[mutableRequest addValue:token forHTTPHeaderField:@"ZURMO_TOKEN"];
[mutableRequest addValue:@"REST" forHTTPHeaderField:@"ZURMO_API_REQUEST_TYPE"];
NSString *postLength = [NSString stringWithFormat:@"%d",[postdata3 length]];
[mutableRequest addValue:postLength forHTTPHeaderField:@"Content-Length"];
[mutableRequest setHTTPBody:postdata3]
这是服务器端(PHP)通过PUT,GET,POST和DELETE处理api调用的方式。 任何帮助将不胜感激谢谢
public static function createApiCall($url, $method, $headers, $data = array())
{
if ($method == 'PUT')
{
$headers[] = 'X-HTTP-Method-Override: PUT'; //also tried this one to add header
}
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
switch($method)
{
case 'GET':
break;
case 'POST':
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));
break;
case 'PUT':
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));
break;
case 'DELETE':
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'DELETE');
break;
}
$response = curl_exec($handle);
return $response;
}
不知道显式错误就很难分辨。
PUT或DELETE的使用通常由称为_method的“隐藏参数”实现。 它不仅特定于Spring MVC的标签库,而且还被其他一些客户端框架使用。 像这样,Spring只是遵循惯例。
为了正确使用此功能,您必须知道后端如何处理PUT或DELETE请求。
例如,在春季,您需要定义一个过滤器(HiddenHttpMethodFilter,请参阅javadoc),该过滤器将_method参数转换为HttpServletRequest中的“真实” HTTP方法表示形式。 这是作为过滤器来完成的,以强调缺少浏览器问题和缺少PUT和DELETE的事实-servlet API很好地支持了这一点。
在第5行,尝试使用:
[mutableRequest setHTTPMethod:@“ POST”];
由于您使用“ x-http-method-override” HTTP标头,因此我认为实际的HTTP请求应该是POST。 但是,正如前面的答案所指出的,它实际上取决于API服务器中使用的后端框架。 “ x-http-method-override”在PHP / Symfony中可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.