使用CURL收到此类错误.. 错误文字:“The page you are looking for cannot be displayed because an invalid method (HTTP verb) was used to attempt access".....
正在使用的网址:http://mkash.something.com
我的CURL代码: $ server = parse_url($ url);
if (!isset($server['port'])) {
$server['port'] = ($server['scheme'] == 'https') ? 443 : 80;
}
if (!isset($server['path'])) {
$server['path'] = '/';
}
if (isset($server['user']) && isset($server['pass'])) {
$header[] = 'Authorization: Basic ' . base64_encode($server['user'] . ':' . $server['pass']);
}
print_r($server);die;
if (function_exists('curl_init')) {
$curl = curl_init($server['scheme'] . '://' . $server['host'] . $server['path'] . (isset($server['query']) ? '?' . $server['query'] : ''));
curl_setopt($curl, CURLOPT_URL, $Url);
curl_setopt($curl, CURLOPT_PORT, $server['port']);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FORBID_REUSE, 1);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $parameters);
$result = curl_exec($curl);
curl_close($curl);
} else {
exec(escapeshellarg(MODULE_PAYMENT_TEST_PAYPAL_EXPRESS_CURL) . ' -d ' . escapeshellarg($parameters) . ' "' . $server['scheme'] . '://' . $server['host'] . $server['path'] . (isset($server['query']) ? '?' . $server['query'] : '') . '" -P ' . $server['port'] . ' -k', $result);
$result = implode("\n", $result);
}
return $result;
PS:我在我的localhost(WAMP)上运行它。有什么建议吗?
答案 0 :(得分:1)
该功能执行POST,您可能需要执行GET操作。尝试将-G
添加到exec行,如下所示:
exec(escapeshellarg(MODULE_PAYMENT_TEST_PAYPAL_EXPRESS_CURL) . ' -d ' . escapeshellarg($parameters) . ' "' . $server['scheme'] . '://' . $server['host'] . $server['path'] . (isset($server['query']) ? '?' . $server['query'] : '') . '" -P ' . $server['port'] . ' -k -G', $result);
这可能不起作用,因为您没有提供有关您正在使用的终点的足够信息,请查看API,它是否说出了预期的结果?你可能会抱怨你没有做PUT或DELETE,在这种情况下你需要使用-X
。
老实说,我会尝试在没有函数的情况下使curl请求工作,回显curl命令,以便你可以直接使用它。
答案 1 :(得分:0)
我使用IIS时出现此问题,我使用静态html页面作为登录页面,默认情况下,Web服务器不允许在.html页面上使用POST或GET动词,我不得不将页面更改为.asp( .php或.aspx也会起作用。)