2009-11-18 19 views
12

Windows üzerinde PHP 5.2.6 çalıştırıyorum, php.ini içinde uncommented extension=php_curl.dll ve extension=php_openssl.dll var; gibi ben phpinfo aşağıdaki görebilirsiniz:SSL'yi fsockopen'de nasıl çalışırım?

curl 
cURL support  enabled 
cURL Information libcurl/7.16.0 OpenSSL/0.9.8g zlib/1.2.3 

openssl 
OpenSSL support  enabled 
OpenSSL Version  OpenSSL 0.9.8g 19 Oct 2007 

Ben cURL sahip bu hayati önem taşımaktadır etkin, ancak OpenSSL sözü beri ben şeyiyle zaten burada dahil düşündüm emin değilim.


Ne yapmak istiyorum basittir: fsockopen kullanarak SSL üzerinden başka bir sunucuya bir POST isteğinde.
Kodum şu ana kadar şudur:

$host = 'www.redacted.com'; 
$data = 'user=redacted&pass=redacted&action=redacted'; 
$response = ""; 

if ($fp = fsockopen("ssl:{$host}", 443, $errno, $errstr, 30)) { 

    $msg = 'POST /wsAPI.php HTTP/1.1' . "\r\n"; 
    $msg .= 'Content-Type: application/x-www-form-urlencoded' . "\r\n"; 
    $msg .= 'Content-Length: ' . strlen($data) . "\r\n"; 
    $msg .= 'Host: ' . $host . "\r\n"; 
    $msg .= 'Connection: close' . "\r\n\r\n"; 
    $msg .= $data; 
    if (fwrite($fp, $msg)) { 
     while (!feof($fp)) { 
      $response .= fgets($fp, 1024); 
     } 
    } 
    fclose($fp); 

} else { 
    $response = false; 
} 

Sadece $host geçmek ve bağlantı noktası 80'i kullanmak Ama gerçekten SSL üzerinden bu göndermek gerekir ve şu anda işe yaramıyor, bu elbette iyi çalışıyor. , $errno için 0 ve $errstr ayarlarında php_network_getaddresses: getaddrinfo failed: No such host is known. olarak ayarlandı. Sunucunun kapatılmasının ya da ana bilgisayar adındaki bir yazım hatası gibi bir sorun olmadığını biliyorum, çünkü 80 numaralı bağlantı noktasını güvensiz bir şekilde geçersem çalışır. Sorunlar sadece SSL'ye geçmeye çalıştığımda başlar.

Bu çalışma için ne yapmalıyım?

+0

Yanıtla ilgisi yok, ancak bunun yerine tls protokolünü kullanmayı düşündünüz mü? TLSv1 esasen SSL'nin dördüncü sürümüdür ve yaygın olarak fiili SSL uygulaması olarak yerini almıştır. – Powerlord

cevap

37

Bu çok açık görünebilir, ancak bunun yerine denediniz mi?

if ($fp = fsockopen('ssl://'. $host, 443, $errno, $errstr, 30)) { 

// gerekli olup olmadığından emin değilim, ama PHP Internet Transports page üzerinde ssl ve tls örnekler onları.

P.S. Ayrıca, dizgelerde bulunan değişkenlere ilişkin bir "şey" de var, bunun neden şimdi dizgi birleştirmeyi kullandığını merak ediyorsanız.

+0

Tanrım Böyle aptal gibi hissediyorum. Tüm bu aldı! Çok teşekkür ederim. Ve ben karışmış değişkenler vs dahil pet peeve umrumda değil. Hepimizin tuhaflıkları var. – SoaperGEM