request method php,在PHP中,iPhone POST请求始终被$_SERVER [‘REQUEST_METHOD’]视为GET

我正在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&currency=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页面),它们看起来完全一样.

我大吃一惊 – 有没有人对如何做有很好的建议?

编辑:

Your test isn’t testing for post or post vs get, it is testing for POST specifically, you could have a case issue there… Have you tried inspecting the request itself in php? – Grady Player

是的,这可能是真的,但该行总是返回GET,因此案例问题已经涵盖,如果这就是你的意思.

Also, please post the result of print_r($_SERVER) from the server when the iPhone sends the request – Aleks G

数组(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

SERVER_SOFTWARE => Apache / 2.2.21(Unix)DAV / 2 PHP / 5.3.8与Suhosin-Patch SERVER_NAME => 10.11.105.254 SERVER_ADDR => 10.11.105.254 SERVER_PORT => 80 REMOTE_ADDR => 10.11.105.254 DOCUMENT_ROOT => / Library / WebServer / Documents SERVER_ADMIN => you@example.com SCRIPT_FILENAME => /Users/tester.php REMOTE_PORT => 51492 GATEWAY_INTERFACE => CGI / 1.1 SERVER_PROTOCOL => HTTP / 1.1 REQUEST_METHOD => GET QUERY_STRING => REQUEST_URI => /tester.php SCRIPT_NAME => /tester.php PHP_SELF => /tester.php REQUEST_TIME => 1334211212 argv => Array argc => 0)

Did you try checking to see if a known variable, e.g. $_POST[‘known_to_be_set_by_client’] is set or not? It’s not PHP that figures out if a request is POST or GET, it’s the web server. – Tim Post

当我尝试从iPhone请求中回显已知变量时,它当然是空的.这是有道理的.当我从表格中回应同样的东西时就在那里.

Post the iOS code your using to make the actual request. – Cliff Ribaudo

以下是创建请求并发送请求的代码:

//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:@"&currency="];

[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,application/xhtml+xml,application/xml;q=0.9,*/*;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");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值