Iphone 向Objective-C网站发布请求

Iphone 向Objective-C网站发布请求,iphone,objective-c,post,nsmutableurlrequest,Iphone,Objective C,Post,Nsmutableurlrequest,我正试图用Objective-C将此帖子请求发送到指定的网站,但对HTML以及如何格式化我的请求知之甚少 地址是:如果你想知道我从哪里得到这个HTML源代码 <FORM ACTION="/prod/bwckschd.p_get_crse_unsec" METHOD="POST"> <INPUT TYPE="hidden" NAME="term_in" VALUE="201320"> <INPUT TYPE="hidden" NAME="sel_subj" V

我正试图用Objective-C将此帖子请求发送到指定的网站,但对HTML以及如何格式化我的请求知之甚少

地址是:如果你想知道我从哪里得到这个HTML源代码

    <FORM ACTION="/prod/bwckschd.p_get_crse_unsec" METHOD="POST">
<INPUT TYPE="hidden" NAME="term_in" VALUE="201320">
<INPUT TYPE="hidden" NAME="sel_subj" VALUE="CS">
<INPUT TYPE="hidden" NAME="sel_levl" VALUE="dummy">
<INPUT TYPE="hidden" NAME="sel_schd" VALUE="dummy">
<INPUT TYPE="hidden" NAME="sel_coll" VALUE="dummy">
<INPUT TYPE="hidden" NAME="sel_divs" VALUE="dummy">
<INPUT TYPE="hidden" NAME="sel_dept" VALUE="dummy">
<INPUT TYPE="hidden" NAME="sel_attr" VALUE="dummy">
   </FORM>
我的控制台显示以下输出:

Succeeded! Received 213 bytes of data
2012-10-25 02:25:38.683 Purdue Course Finder[25844:c07] <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>410 Gone</title>
</head><body>
<h1>Gone</h1>
/prod/bwckschd.p_get_crse_unsechas been permanently removed from this server.</p>
</body></html>
成功!收到213字节的数据
2012-10-25 02:25:38.683普渡航向发现者[25844:c07]
410不见了
跑了
/prod/bwckshd.p_get_crse_unsechas已从此服务器中永久删除

有人能帮我弄清楚为什么这不是一个有效的请求吗?如果一个值被设置为dummy,我是否应该将其添加到字符串中?字符串的格式是否不正确,每个值的后缀都是&?有什么建议吗?有人能给我这个发帖请求的URL,这样我就可以修改我的代码了吗?

试试这个格式

[request setValue:@"201320" forHTTPHeaderField:@"term_in"];
[request setValue:@"CS" forHTTPHeaderField:@"sel_subj"];
[request setValue:@"dummy" forHTTPHeaderField:@"sel_levl"];

您需要提供字段及其值作为请求的主体,并设置内容类型:

NSString *paramString = [NSString stringWithFormat:@"arg1=%@&arg2=%@", val1, val2];
NSData  *data = [paramString dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
然后执行您的请求。

@请尝试此代码

NSURL *url = [NSURL URLWithString:@"https://selfservice.mypurdue.purdue.edu/prod/bwckctlg.p_display_courses"];  

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:3.0];

[request setHTTPMethod:@"POST"];

NSString *args = @"term_in=201320,sel_subj=CS,sel_levl=dummy,sel_schd=dummy,sel_coll=dummy"sel_divs=dummy,sel_dept=dummy,sel_attr=dummy";

NSData *requestBody = [args dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPBody:requestBody];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

使用NSURLConnectionLegate方法处理响应或错误

如何对多个值执行此操作?以这种方式设置这些值会将它们添加到我的POST请求中,还是我需要做更多的工作<代码>[请求设置值:@“201320”用于HttpHeaderField:@“term_in”]
[请求设置值:@“CS”用于HttpHeaderField:@“sel_subc”]这就是所需要的吗?是的,我已经更新了答案。对于所有值,都需要这样设置。或者您可以将其设置为setHTTPBody.Perfect。因此,只需对所有字段执行此操作,然后继续,它就会按预期正确工作?是的,这是我们通常在HTTP Post请求中设置值的方式。您还需要上面列出的其余代码。试试看,让我知道。好的。我明天才能试这个,因为我今晚有考试。我会将此标记为已接受的答案,因为您的响应时间非常快。谢谢!不同的字段不是应该用分号而不是逗号来分隔吗?还是这样好?我做了一个改变,如果你知道如何解决它,我将不胜感激。
NSURL *url = [NSURL URLWithString:@"https://selfservice.mypurdue.purdue.edu/prod/bwckctlg.p_display_courses"];  

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:3.0];

[request setHTTPMethod:@"POST"];

NSString *args = @"term_in=201320,sel_subj=CS,sel_levl=dummy,sel_schd=dummy,sel_coll=dummy"sel_divs=dummy,sel_dept=dummy,sel_attr=dummy";

NSData *requestBody = [args dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPBody:requestBody];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];