donglu7998 2017-03-18 20:28
浏览 260
已采纳

PHP CURL在循环中获得400错误

here the foreach loops returns a phone number which goes in the link but whenever I try to run this script it gives me the error 400 bad request. I have also tried using the useragent but even that does not solve the error. any help would be great.

PS. this is my first question please let me know if I can provide anything to solve this problem.

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);
}

Update:

When I add urlencode the bad request definitely goes but I want this url to execute: http://bmsms.co.in/sendsms.aspx?mobile=1234567890&pass=password&senderid=ID&to=+ 9408644603&msg=hey but instead this url is executed: http://bmsms.co.in/sendsms.aspx?mobile=1234567890&pass=password&senderid=ID&to=%2B+9408644603&msg=hey

Also here I have only applied urlencode to the phone number rest of the fields I'm entering myself directly. Also the bad request probably goes as the api won't execute if the phone number is not correct.

  • 写回答

1条回答 默认 最新

  • dpql57753 2017-03-19 20:15
    关注

    The + in the phone numbers for some reason is breaking the receiving applications system. URL encoding doesn't resolve this because they only want numbers. You can use a regex to replace all the leading, non-numerical, characters with nothing.

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

    \D is a non number (\d is a number).
    ^ is the start of the string.
    + is one or more of the previous character/group.
    /s are delimiters showing the start and end of the regex.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?