在PHP中,iPhone POST请求始终被$_SERVER [‘REQUEST_METHOD’]视
我正在iPhone上做一个项目.在这里,我必须向Web服务发送POST请求.我使用NSMutableURLRequest和NSURLConnection发送数据,服务器使用
PHP.我发现检查if($_SERVER [‘REQUEST_METHOD’]!=“POST”)总是失败,就像返回’GET’一样,即使我在localhost上尝试它也是如此.
我的POST请求如下(通过Wireshark嗅探): POST tester.php HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Connection: keep-alive Referer: http://localhost/tester.php Content-Type: application/x-www-form-urlencoded Content-Length: 422 protocol=4&msgtype=authorize&merchant=86189919&language=da&ordernumber=1274168351&amount=100¤cy=DKK&continueurl=http%3A%2F%2Fquickpay.net%2Ffeatures%2Fpayment-window%2Fok.php&cancelurl=http%3A%2F%2Fquickpay.net%2Ffeatures%2Fpayment-window%2Ferror.php&callbackurl=http%3A%2F%2Fquickpay.net%2Ffeatures%2Fpayment-window%2Fcallback.php&autocapture=0&cardtypelock=&splitpayment=1&md5check=d2259d9db077e0f5a41b4bf271c3c549 当然,那里有很多虚拟文本,通常不会出现在iPhone上,但是我试图通过html表单进行相同的调用,这很有效.因此,我已经复制了所有信息,看看这是否有所作为,但无济于事. 我比较了两个请求(一个来自iPhone,另一个来自我的php页面),它们看起来完全一样. 我大吃一惊 – 有没有人对如何做有很好的建议? 编辑:
是的,这可能是真的,但该行总是返回GET,因此案例问题已经涵盖,如果这就是你的意思.
数组(HTTP_HOST => 10.11.105.254 HTTP_USER_AGENT => Mozilla / 5.0(iPhone模拟器; CPU iPhone OS 5_1,如Mac OS X)AppleWebKit / 534.46(KHTML,如Gecko)Mobile / 9B176 HTTP_ACCEPT => text / html,应用程序/ xhtml xml,application / xml; q = 0.9,/; q = 0.8 HTTP_ACCEPT_LANGUAGE => en-us HTTP_ACCEPT_ENCODING => gzip,deflate HTTP_CONNECTION => keep-alive PATH => /usr/bin:/ bin: /usr/sbin:/ sbin SERVER_SIGNATURE => Apache / 2.2.21(Unix)DAV / 2 PHP / 5.3.8与Suhosin-Patch Server在10.11.105.254端口80
当我尝试从iPhone请求中回显已知变量时,它当然是空的.这是有道理的.当我从表格中回应同样的东西时就在那里.
以下是创建请求并发送请求的代码: //variables NSString *protocol = @"4"; NSString *msgtype = @"authorize"; NSString *merchant = @"86189919"; NSString *language = @"da"; NSString *orderNo = @"1274168351"; NSString *amount = @"100"; NSString *currency = @"DKK"; NSString *continueURL = @"http://quickpay.net/features/payment-window/ok.php"; NSString *cancelURL = @"http://quickpay.net/features/payment-window/error.php"; NSString *callbackURL = @"http://quickpay.net/features/payment-window/callback.php"; NSString *autoCapture = @"0"; NSString *cardtypeLock =@""; NSString *splitText = @"1"; NSString *md5check = @"d2259d9db077e0f5a41b4bf271c3c549"; //setting up the request NSMutableString *post = [[NSMutableString alloc] initWithString:@"protocol="]; [post appendString:protocol]; [post appendString:@"&msgtype="]; [post appendString:msgtype]; [post appendString:@"&merchant="]; [post appendString:merchant]; [post appendString:@"&language="]; [post appendString:language]; [post appendString:@"&ordernumber="]; [post appendString:orderNo]; [post appendString:@"&amount="]; [post appendString:amount]; [post appendString:@"¤cy="]; [post appendString:currency]; [post appendString:@"&continueurl="]; [post appendString:continueURL]; [post appendString:@"&cancelurl="]; [post appendString:cancelURL]; [post appendString:@"&callbackurl="]; [post appendString:callbackURL]; [post appendString:@"&autocapture="]; [post appendString:autoCapture]; [post appendString:@"&cardtypelock="]; [post appendString:cardtypeLock]; [post appendString:@"&splitpayment="]; [post appendString:splitText]; [post appendString:@"&md5check="]; [post appendString:md5check]; //escape characters NSString *tmp = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes( NULL,(__bridge CFStringRef)post,NULL,(CFStringRef)@";/:@+$,~",kCFStringEncodingUTF8 ); NSData *body = [tmp dataUsingEncoding:NSUTF8StringEncoding]; //setup url NSString *urlString =@"http://10.10.225.255/tester.php"; NSURL *quickUrl = [NSURL URLWithString:urlString]; //setup URL request NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init]; //method [request setHTTPMethod:@"POST"]; //url [request setURL:url]; //body data to string NSString *strData = [[NSString alloc]initWithData:body encoding:NSUTF8StringEncoding]; //content length NSString *postLenght = [NSString stringWithFormat:@"%d",[body length]]; //set body [request setHTTPBody:body]; //Dummy data to make the request look like the same from the HTML form. [request setValue:@"localhost" forHTTPHeaderField:@"Host"]; [request setValue:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:10.0.2) Gecko/20100101 Firefox/10.0.2" forHTTPHeaderField:@"User-Agent"]; [request setValue:@"text/html,*/*;q=0.8" forHTTPHeaderField:@"Accept"]; [request setValue:@"en-us,en;q=0.5" forHTTPHeaderField:@"Accept-Language"]; [request setValue:@"gzip,deflate" forHTTPHeaderField:@"Accept-Encoding"]; [request setValue:@"http://localhost/tester.php" forHTTPHeaderField:@"Referer"]; [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; [request setValue:postLenght forHTTPHeaderField:@"content-length"]; //send the request to server if([[NSURLConnection alloc] initWithRequest:request delegate:self]){ NSLog(@"sending data to quickpay"); } 解决方法
(这更像是评论而不是答案)如果
if ($_SERVER['REQUEST_METHOD'] != "POST") 总是失败(正如你在你的问题中写的那样),这必须意味着: $_SERVER['REQUEST_METHOD'] == "POST" 所以要么你提出了错误的问题,要么你没有正确验证输入值.请将var_dump($_ SERVER)的输出添加到您的问题中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |