gpt4 book ai didi

cocoa - 从 Cocoa 向 Tumblr 发送 POST 请求

转载 作者:行者123 更新时间:2023-12-03 16:06:54 28 4
gpt4 key购买 nike

此代码片段不起作用,我收到“身份验证失败”消息。来自服务器的响应。有什么想法吗?

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] 
initWithURL:
[NSURL URLWithString:@"http://www.tumblr.com/api/write"]];
[request setHTTPMethod:@"POST"];
[request addValue:_tumblrLogin forHTTPHeaderField:@"email"];
[request addValue:_tumblrPassword forHTTPHeaderField:@"password"];
[request addValue:@"regular" forHTTPHeaderField:@"type"];
[request addValue:@"theTitle" forHTTPHeaderField:@"title"];
[request addValue:@"theBody" forHTTPHeaderField:@"body"];

NSLog(@"Tumblr Login:%@\nTumblr Password:%@", _tumblrLogin, _tumblrPassword);

[NSURLConnection connectionWithRequest:request delegate:self];

[request release];

_tumblrLogin_tumblrPassword 均通过代码中其他位置的 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding 运行。我的登录电子邮件的格式为“address+test@test.com”。它对于直接登录 tumblr 来说效果很好,但我想知道“+”字符是否会导致编码问题?这并没有被逃脱。应该是吗?

<小时/>

感谢 Martin 的建议,我现在使用 CFURLCreateStringByAddingPercentEscapes 来转义我的登录名和密码。不过,我仍然遇到同样的问题,我的身份验证失败。

最佳答案

问题是您没有创建正确的 HTTP POST 请求。 POST 请求需要格式正确的多部分 MIME 编码正文,其中包含要发送到服务器的所有参数。您尝试将参数设置为 HTTP header ,但这根本不起作用。

此代码将执行您想要的操作,特别注意创建有效的多部分 MIME 字符串的 NSString 类别:

@interface NSString (MIMEAdditions)
+ (NSString*)MIMEBoundary;
+ (NSString*)multipartMIMEStringWithDictionary:(NSDictionary*)dict;
@end

@implementation NSString (MIMEAdditions)
//this returns a unique boundary which is used in constructing the multipart MIME body of the POST request
+ (NSString*)MIMEBoundary
{
static NSString* MIMEBoundary = nil;
if(!MIMEBoundary)
MIMEBoundary = [[NSString alloc] initWithFormat:@"----_=_YourAppNameNoSpaces_%@_=_----",[[NSProcessInfo processInfo] globallyUniqueString]];
return MIMEBoundary;
}
//this create a correctly structured multipart MIME body for the POST request from a dictionary
+ (NSString*)multipartMIMEStringWithDictionary:(NSDictionary*)dict
{
NSMutableString* result = [NSMutableString string];
for (NSString* key in dict)
{
[result appendFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n",[NSString MIMEBoundary],key,[dict objectForKey:key]];
}
[result appendFormat:@"\r\n--%@--\r\n",[NSString MIMEBoundary]];
return result;
}
@end


@implementation YourObject
- (void)postToTumblr
{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]
initWithURL:
[NSURL URLWithString:@"http://www.tumblr.com/api/write"]];
[request setHTTPMethod:@"POST"];
//tell the server to expect 8-bit encoded content as we're sending UTF-8 data,
//and UTF-8 is an 8-bit encoding
[request addValue:@"8bit" forHTTPHeaderField:@"Content-Transfer-Encoding"];
//set the content-type header to multipart MIME
[request addValue: [NSString stringWithFormat:@"multipart/form-data; boundary=%@",[NSString MIMEBoundary]] forHTTPHeaderField: @"Content-Type"];

//create a dictionary for all the fields you want to send in the POST request
NSDictionary* postData = [NSDictionary dictionaryWithObjectsAndKeys:
_tumblrLogin, @"email",
_tumblrPassword, @"password",
@"regular", @"type",
@"theTitle", @"title",
@"theBody", @"body",
nil];
//set the body of the POST request to the multipart MIME encoded dictionary
[request setHTTPBody: [[NSString multipartMIMEStringWithDictionary: postData] dataUsingEncoding: NSUTF8StringEncoding]];
NSLog(@"Tumblr Login:%@\nTumblr Password:%@", _tumblrLogin, _tumblrPassword);
[NSURLConnection connectionWithRequest:request delegate:self];
[request release];
}
@end

关于cocoa - 从 Cocoa 向 Tumblr 发送 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326071/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com