Cloudflare阻止cURL请求到支付网关api

时间:2015-02-21 01:32:07

标签: php rest curl payment-gateway cloudflare

在工作中,我正在尝试调试与其支付网关rest api有问题的客户端站点。他们的网关提供商使用CloudFlare(它不在客户端站点端),这阻止了支付表单提交,因为A:它不喜欢cURL头(我已经通过传递firefox头来修复此部分) ),和B:未启用Cookie。第二部分是有问题的。服务器不存储像浏览器这样的cookie,我不知道如何捕获cookie响应并将其与cURL请求一起传回以解决CloudFlare的令人讨厌的安全措施(不要问我为什么支付网关会像这样配置它,它确实没有意义,它们提供给连接的脚本不起作用)。提供了发出请求的脚本部分:

  $ch = curl_init();

  // set URL and other appropriate options
  curl_setopt($ch, CURLOPT_URL, $gatewayURL);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
  curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); //I added this bit to address the user agent issue, everything else is directly from their script.
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
  curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  $data = curl_exec($ch);
  curl_close($ch);

1 个答案:

答案 0 :(得分:-1)

  

它不喜欢cURL标题(我已经通过传递修复了这部分   改为使用firefox标题)

精细。

  

未启用Cookie。第二部分是有问题的。

布尔什特。

<强>因此吗

您需要启用此cURL选项,如下所示:

curl_setopt ($ch, CURLOPT_HEADER, true);

HTTP标头将出现在回复中。这是捕获cookie值的预期时刻。请看下面的内容:

// Firstly
$data = curl_exec ($ch);
curl_close ($ch);

// Secondly
preg_match ('/Cookie: (.*);/', $data, $header);
$cookie = $header[1];
  

PS。:有时Cookie标题行可以显示为Set-Cookie而不是。因为它可以捕获cookie是在响应时创建的。

从现在开始,您可以在下一个请求中使用 $ cookie 值:

  curl_setopt ($ch, CURLOPT_COOKIE, $cookie);

我希望你能理解这一切。它可能对你非常有用。 You also can look for the official PHP documentation