Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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/3/heroku/2.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
使用Objective-C发送HTTP POST数据_Objective C_Http Post - Fatal编程技术网

使用Objective-C发送HTTP POST数据

使用Objective-C发送HTTP POST数据,objective-c,http-post,Objective C,Http Post,我有一些使用POST发送图像的代码。我想做的是在同一篇文章中发送一些文本。这就是我到目前为止所做的: NSMutableURLRequest *photoRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:photoPostString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; [photoRequest setHT

我有一些使用POST发送图像的代码。我想做的是在同一篇文章中发送一些文本。这就是我到目前为止所做的:

NSMutableURLRequest *photoRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:photoPostString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[photoRequest setHTTPMethod:@"POST"];

NSString *boundary = @"---------------------------14737809831466499882746641449";
        NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[photoRequest addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"%@.jpg\"\r\n", obsID] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[photoRequest setHTTPBody:body];

其工作原理是通过URL发送和接收图像。我想做的是在同一个请求中以字符串的形式发送一些其他信息,例如photoID。有可能吗?

是的,有可能。试试看

NSMutableURLRequest *photoRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:photoPostString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[photoRequest setHTTPMethod:@"POST"];

NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[photoRequest addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"%@.jpg\"\r\n", obsID] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"text\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"photoID=1234" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[photoRequest setHTTPBody:body];

您的代码非常完美,只需在代码下方添加以下代码即可发送文本等其他数据

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setObject:@"<YOUR TEXT>" forKey:@"<KEY>"];

    [body appendData:[self createFormData:dict withBoundary:boundary]];
    [photoRequest setHTTPBody:body];

    NSData *returnData = [NSURLConnection sendSynchronousRequest:photoRequest returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
    NSLog(@"%@", returnString);
NSMutableDictionary*dict=[[NSMutableDictionary alloc]init];
[dict setObject:@“forKey:@]”;
[body appendData:[self-createFormData:dict withBoundary:boundary];
[photoRequest setHTTPBody:body];
NSData*returnData=[NSURLConnection sendSynchronousRequest:photoRequest returningResponse:nil错误:nil];
NSString*returnString=[[NSString alloc]initWithData:returnData编码:NSUTF8StringEncoding];
NSLog(@“%@”,返回字符串);
下面是创建表单数据的函数

- (NSData*)createFormData:(NSDictionary*)myDictionary withBoundary:(NSString*)myBounds
{
    NSMutableData *myReturn = [[NSMutableData alloc] init];
    NSArray *formKeys = [myDictionary allKeys];
    for (int i = 0; i < [formKeys count]; i++) {
        [myReturn appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",myBounds] dataUsingEncoding:NSASCIIStringEncoding]];
        [myReturn appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n%@",[formKeys objectAtIndex:i],[myDictionary valueForKey:[formKeys objectAtIndex:i]]] dataUsingEncoding:NSASCIIStringEncoding]];
    }
    return myReturn;
}
-(NSData*)createFormData:(NSDictionary*)myDictionary withBoundary:(NSString*)myBounds
{
NSMutableData*myReturn=[[NSMutableData alloc]init];
NSArray*formKeys=[myDictionary allKeys];
对于(int i=0;i<[formKeys count];i++){
[myReturn appendData:[[NSString stringWithFormat:@“\r\n--%@\r\n”,myBounds]dataUsingEncoding:NSASCIIStringEncoding];
[myReturn appendData:[[NSString stringWithFormat:@“内容处置:表单数据;名称=\”%@“\r\n\r\n%@”,[formKeys objectAtIndex:i],[myDictionary valueForKey:[formKeys objectAtIndex:i]]dataUsingEncoding:NSASCIIStringEncoding];
}
返回我的返回;
}

这不起作用,但另一个答案起作用。我不确定原因,因为它们似乎暗示着相同的情况。@RichardGriffiths更新。这起到了作用。。。但我不知道为什么这个答案是正确的,而另一个答案不是。作为补充(因为它已经困惑了好几个小时),当您执行returnData returnString部分时,当我在php中使用print$query并始终将“null”返回给Xcode时,它似乎不喜欢它。打印“图像加载”之类的字符串没有问题。我想知道这个问题是什么,但我永远也看不到。这正常吗?问题在于文本??。如果是的话,你能告诉我你通过了哪些文本吗?如果您输入空间字符或表情符号,则可能需要对该文本进行编码。