我有一个网络服务。我用它来接受一个小(缩略图大小)图像的base 64字符串表示。与Fiddler一起使用并手动发布请求时,此Web服务非常有用。当我使用NSMutableURLRequest(或ASIHTTPRequest)运行相同的请求时,它总是返回413状态代码(413是请求实体太大)。
为什么NSMutableURLRequest会让它拿出413,而Fiddler每次都会返回200?
这是我的NSMutableURLRequest代码。如果有人有任何想法,我真的可以使用推动。
//the image request
NSMutableURLRequest *imageRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:POST_IMAGE_API_URL]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:240.0];
//the post parameters
[imageRequest setHTTPMethod:@"POST"];
[imageRequest setHTTPBody:[imageMessage dataUsingEncoding:NSUTF8StringEncoding]];
[imageRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
//a few other things
NSURLResponse* imageresponse;
NSError *imageerror;
NSData* imageresult = [NSURLConnection sendSynchronousRequest:imageRequest returningResponse:&imageresponse error:&imageerror];
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)imageresponse;
NSLog(@"imageresponse: %d", httpResponse.statusCode);
答案 0 :(得分:1)
当我看到你的代码时:
//the image request
NSMutableURLRequest *imageRequest =
[NSMutableURLRequest requestWithURL:[NSURL URLWithString:POST_IMAGE_API_URL]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:240.0];
我猜你在“POST_IMAGE_API_URL
”#define中有一些笨拙的角色,很可能是你传递的参数。
您需要URL encode the URL string传递给您的网址请求。
尝试做:
// assuming POST_IMAGE_API_URL starts with a "@" character
NSString * yourURLAsString = [NSString stringWithString: POST_IMAGE_API_URL];
NSURL * yourEncodedURL = [yourURL stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
并将“yourEncodedURL”作为参数传递给URLRequest。
答案 1 :(得分:0)
我找到了解决方案。这个问题不在Apple端,而是在IIS端。 IIS托管应用程序(其中一个是我的WCF服务)的附加参数超出了WCF的web.config文件中指定的参数,该文件为每个服务指定了“uploadReadAheadSize”。我增加了这个,413消失了。有趣的是,当Fiddler在与服务所在的服务器所在的同一网络上的桌面客户端上发送HTTP请求时,我没有收到此错误。基本上,我有this guy's problem的解决方案,但不是他的背景。我的解决方案是他的背景。