0

我有一个网络服务。我用它来接受一个小(缩略图大小)图像的 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);
4

2 回答 2

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 请求的 URL 字符串进行 URL 编码。

尝试做:

// assuming POST_IMAGE_API_URL starts with a "@" character
NSString * yourURLAsString = [NSString stringWithString: POST_IMAGE_API_URL]; 
NSURL * yourEncodedURL = [yourURL stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

并将“yourEncodedURL”作为参数传递给 URLRequest。

于 2012-06-20T16:28:32.317 回答
0

我找到了解决方案。问题不在 Apple 端,而在 IIS 端。除了在 WCF 的 web.config 文件中指定的为每个服务指定“uploadReadAheadSize”的参数之外,还有一个用于 IIS 托管应用程序(其中一个是我的 WCF 服务)的附加参数。我增加了这个,413就消失了。有趣的是,在与服务所在的服务器位于同一网络的桌面客户端上从 Fiddler 发送 HTTP 请求时,我没有收到此错误。基本上,我有这个人问题的解决方案,但没有他的背景。我的解决方案是他的上下文。

于 2012-06-22T13:57:41.327 回答