PHP CURL在循环中获得400错误

时间:2017-03-18 20:28:50

标签: php regex curl urlencode url-encoding

这里foreach循环返回一个电话号码,该电话号码在链接中,但每当我尝试运行此脚本时,它会给我错误400错误请求。我也尝试过使用useragent,但即使这样也无法解决错误。任何帮助都会很棒。

PS。这是我的第一个问题,如果我能提供任何解决方案,请告诉我。

foreach($var5 as $number) {
     $ch = curl_init();
     $ch1="http://bmsms.co.in/sendsms.aspx?mobile=0000000000&pass=xxxxxxxx&senderid=xxxxxxx&to=$number&msg=hey";
     echo $ch1;
     curl_setopt($ch, CURLOPT_URL, "$ch1");
     curl_setopt($ch, CURLOPT_HEADER, 0);
     //curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36');
     curl_exec($ch);
     curl_close($ch);
}

更新

当我添加urlencode时,错误的请求肯定会发生,但我希望此网址执行:http://bmsms.co.in/sendsms.aspx?mobile=1234567890&pass=password&senderid=ID&to=+ 9408644603&msg=hey但是此网址会被执行:http://bmsms.co.in/sendsms.aspx?mobile=1234567890&pass=password&senderid=ID&to=%2B+9408644603&msg=hey

同样在这里,我只将urlencode应用于我直接进入自己的其他字段的电话号码。此外,糟糕的请求可能是因为如果电话号码不正确,api将无法执行。

1 个答案:

答案 0 :(得分:1)

由于某种原因,电话号码中的+正在破坏接收应用系统。 URL编码无法解决此问题,因为它们只需要数字。您可以使用正则表达式替换所有前导的非数字字符。

preg_replace('/^\D+/','', $serverthing)

\D是非数字(\d是数字) ^是字符串的开头。
+是前一个字符/组中的一个或多个 /是分隔符,显示正则表达式的开头和结尾。