cURL 脚本可在本地主机上运行,​​但不能在实时服务器上运行

2024-02-13

我正在尝试通过脚本发送短信。我正在使用curl 运行在供应商服务器上发送短信的API。 fopen 和 file_get_contents 在我的服务器上被阻止。所以,cURL 是我唯一的选择。

剧本 :-

// Initialize options for REST interface
$adb_url="http://example.com";
$adb_option_defaults = array(
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 2
  ); 
// ArangoDB REST function.
// Connection are created demand and closed by PHP on exit.
function adb_rest($method,$uri,$query=NULL,$json=NULL,$options=NULL){
    global $adb_url,$adb_handle,$adb_option_defaults;

    // Connect 
    if(!isset($adb_handle)) $adb_handle = curl_init();

    // Compose query
    $options = array(
    CURLOPT_URL => $adb_url.$uri."?".$query,
    CURLOPT_CUSTOMREQUEST => $method, // GET POST PUT PATCH DELETE HEAD OPTIONS 
    CURLOPT_POSTFIELDS => $json,
    CURLOPT_PORT => 8080,
    CURLOPT_HTTPHEADER => Array('Content-type: text/plain')
    ); 
    curl_setopt_array($adb_handle,($options + $adb_option_defaults)); 

    // send request and wait for responce
    $responce =  curl_exec($adb_handle);

    print_r(curl_getinfo($adb_handle));

    return($responce);
}
// Create a collection
$responce = adb_rest("GET","/bulksms/bulksms","username=xxx&password=xxx&type=2&dlr=1&destination=xxx&source=xxx&message=xxxxxx",'');

实时服务器 cURL 响应:

Array ( 
   [url] => http://example.com/bulksms/bulksms?
username=xxx&password=xxx&type=2&dlr=1&destination=xxx&source=xxx&message=xxxxxx 
   [content_type] => 
   [http_code] => 0 
   [header_size] => 0 
   [request_size] => 0 
   [filetime] => -1 
   [ssl_verify_result] => 0 
   [redirect_count] => 0 
   [total_time] => 1.999604 
   [namelookup_time] => 1.315312 
   [connect_time] => 0 
   [pretransfer_time] => 0 
   [size_upload] => 0 
   [size_download] => 0 
   [speed_download] => 0 
   [speed_upload] => 0 
   [download_content_length] => -1
   [upload_content_length] => -1
   [starttransfer_time] => 0 
   [redirect_time] => 0 [certinfo] => Array ( ) [redirect_url] => )    

本地主机 cURL 响应:

Array (
   [url] => http://example.com/bulksms/bulksms?
username=xxx&password=xxx&type=2&dlr=1&destination=xxx&source=xxx&message=xxxxxx 
   [content_type] => text/plain
   [http_code] => 200
   [header_size] => 129
   [request_size] => 646
   [filetime] => -1
   [ssl_verify_result] => 0
   [redirect_count] => 0
   [total_time] => 0.14 
   [namelookup_time] => 0
   [connect_time] => 0.047
   [pretransfer_time] => 0.047
   [size_upload] => 0
   [size_download] => 54
   [speed_download] => 385
   [speed_upload] => 0 
   [download_content_length] => 54
   [upload_content_length] => 0
   [starttransfer_time] => 0.14
   [redirect_time] => 0
   [certinfo] => Array ( )
   [primary_ip] => xxx.xxx.xxx.xxx 
   [primary_port] => 8080
   [local_ip] => xxx.xxx.x.xxx
   [local_port] => 56359
   [redirect_url] => )    

通过本地主机我收到一条短信,而通过服务器则没有。

更新 - 本地主机 php 版本:

PHP Version 5.4.3

服务器php版本:

PHP Version 5.3.27

这很难说,但我建议添加CURLOPT_CONNECTTIMEOUT此外CURLOPT_TIMEOUT到你的卷曲选项。我正在设置CURLOPT_CONNECTTIMEOUT to 5在这个例子中。并设置CURLOPT_HTTPGET to TRUE。另外,添加CURLOPT_USERAGENT以防万一远程服务器需要用户代理:

// Compose query
$options = array(
CURLOPT_URL => $adb_url.$uri."?".$query,
CURLOPT_CUSTOMREQUEST => $method, // GET POST PUT PATCH DELETE HEAD OPTIONS 
CURLOPT_POSTFIELDS => $json,
CURLOPT_PORT => 8080,
CURLOPT_HTTPGET => TRUE,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_USERAGENT => "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)",
CURLOPT_HTTPHEADER => Array('Content-type: text/plain')
); 
curl_setopt_array($adb_handle,($options + $adb_option_defaults)); 

另外,不清楚本地设置上的 PHP 版本是否与服务器相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cURL 脚本可在本地主机上运行,​​但不能在实时服务器上运行 的相关文章

随机推荐