如何调试从我的iPhone应用程序发送的HTTP POST?

时间:2013-02-06 15:44:14

标签: objective-c http

我正在使用以下代码将图像上传到我的服务器:

// Dictionary that holds post parameters. You can set your post parameters that your server accepts or programmed to accept.
NSMutableDictionary* _params = [[NSMutableDictionary alloc] init];
DataManager *manager = [DataManager sharedManager];
[_params setObject:[manager token] forKey:@"token"];
[_params setObject:[NSString stringWithFormat:@"%d",[manager site_id]] forKey:@"site"];

NSString *BoundaryConstant = @"----------V2ymHFg03ehbqgZCaKO6jy";
NSString* FileParamConstant = @"image";
NSURL* requestURL = [NSURL URLWithString:@"https://mysite.com/api/upload/"];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:30];
[request setHTTPMethod:@"POST"];

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", BoundaryConstant];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];

for (NSString *param in _params) {
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", param] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"%@\r\n", [_params objectForKey:param]] dataUsingEncoding:NSUTF8StringEncoding]];
}

NSData *imageData = UIImageJPEGRepresentation(saveImage, 1.0);
if (imageData) {
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", FileParamConstant] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:imageData];
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}

[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:body];
NSLog(@"%@",body);

NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
NSLog(@"Sending request with length: %@",postLength);
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];

[request setURL:requestURL];
 NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];

在我尝试上传时查看我的服务器日志,我没有收到很多信息:

82.132.x.x - - [06/Feb/2013:15:37:45 +0000] "-" 400 0 "-" "-"

将此与来自同一应用的其他查询进行比较:

82.132.x.x - - [06/Feb/2013:15:36:13 +0000] "GET /api/sites/?token=blah HTTP/1.1" 200 269 "-" "My%20App/1.0 CFNetwork/609.1.4 Darwin/13.0.0"

我怎样才能弄清楚出了什么问题?很明显,请求在某种程度上是错误的,导致错误400.是否有一些工具可以用来检查它?

2 个答案:

答案 0 :(得分:1)

尝试Charles ...它比wireshark更友好(不是免费的......但他们有试用)http://www.charlesproxy.com/

答案 1 :(得分:0)

Wireshark应该允许您检查发送/接收的内容。http://www.wireshark.org/download.html