開発マシン(mac)からcURL経由での接続に問題はありませんPHP=これに接続していますが、Ubuntuではこのエラーが発生します。ローカルマシンとAmazon AWSインスタンスで試しました。私はグググググググググググして、レンガの壁に近づき続けています。ファイアウォールの制限はなく、完全な謎です。php5-curlIS Ubuntuにインストールされているので、私はこのコマンドを実行しました:
curl -v https://api.rkd.reuters.com/api/2006/05/01/TokenManagement_1.svc/Anonymous
この出力を取得しましたが、解決策の手がかりはありません。 OpenSSLもインストールされます。
* About to connect() to api.rkd.reuters.com port 443 (#0)
* Trying 159.220.40.240... connected
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to api.rkd.reuters.com:443
* Closing connection #0
curl: (35) Unknown SSL protocol error in connection to api.rkd.reuters.com:443
これに関して歓迎されたアイデア
残念ながら、ホストがphp 5.5にアップグレードしたくないという同じ問題がありました。
私はそれを解決して、cURLを使用するようにphpのSoapClientを拡張する新しいクラスを作成しました。
/**
* New SoapClient class.
* This extends php's SoapClient,
* overriding __doRequest to use cURL to send the SOAP request.
*/
class SoapClientCurl extends SoapClient {
public function __doRequest($request, $location, $action, $version, $one_way = NULL) {
$soap_request = $request;
$header = array(
'Content-type: application/soap+xml; charset=utf-8',
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: \"$action\"",
"Content-length: " . strlen($soap_request),
);
$soap_do = curl_init();
$url = $location;
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => FALSE,
//CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_RETURNTRANSFER => TRUE,
//CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_POST => TRUE,
CURLOPT_URL => $url,
CURLOPT_POSTFIELDS => $soap_request,
CURLOPT_HTTPHEADER => $header,
CURLOPT_FAILONERROR => TRUE,
CURLOPT_SSLVERSION => 3,
);
curl_setopt_array($soap_do, $options);
$output = curl_exec($soap_do);
if ($output === FALSE) {
$err = 'Curl error: ' . curl_error($soap_do);
}
else {
///Operation completed successfully
}
curl_close($soap_do);
// Uncomment the following line to let the parent handle the request.
//return parent::__doRequest($request, $location, $action, $version);
return $output;
}
}
この問題が発生したため、curl SSLのバージョンをバージョン3に設定して修正しました
curl_setopt($ch, CURLOPT_SSLVERSION,3);
どうやらサーバーはSSLバージョン3を必要とし始め、この設定によりSSLを使用したcURLが再び機能し始めたようです。
直した! Ubuntu 12.04の既知の問題です。
これらの指示
-それをキャンセルしてください、それはただ例外を無効にしました、これはまだ機能していません!助けて!
-編集-最後に修正した方法をご紹介します!
PHP 5.5を5.4.3から5.5にアップグレードし、次のオプションを呼び出しに設定しました。これにより修正されました。
$options = array('ssl_method' => SOAP_SSL_METHOD_SSLv3,'soap_version' => SOAP_1_2);
$sc = new SoapClient('https://my-url.com/call/', $options);
定数SOAP_SSL_METHOD_SSLv3がPHPバージョン<5.5に存在しないため、残念ながら当時のUbuntuサーバーはapt-get update php5を介して5.4.3へのアップグレードしか許可していなかったため、アップグレードが必要でした。新しいバージョンを手動でインストールしましたが、現在は正常に動作しています。
エラー:CURLエラー:35-OpenSSL SSL_connect:httpapi.com:443(IP:162.x.x.x&204.x.x.x)への接続でSSL_ERROR_SYSCALL
WHMCSの場合:
ホストに連絡して、IPアドレスをホワイトリストに登録し、APIを使用することができます。