2009-11-18 4 views
12

Windows에서 PHP 5.2.6을 실행 중이므로 extension=php_curl.dllextension=php_openssl.dll이 주석 처리되지 않았습니다. 같은 나는 phpinfo에서 다음을 볼 수 있습니다fsockopen에서 SSL을 작동 시키려면 어떻게합니까?

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 

나는 컬을 가진 것은이에 매우 중요 가능하지만, OpenSSL을 언급 한 이후 나는 완벽 어쨌든 여기에 포함 거라고 생각 모르겠어요.


는 내가하고 싶은 간단하다 : fsockopen를 사용하여 SSL을 통해 다른 서버로 POST 요청을합니다.
내 코드는 지금까지 있습니다 :

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

난 그냥 $host에 전달하고 포트 80을 사용하지만 난 정말 SSL을 통해이를 보낼 필요가 있고, 지금은 작동하지 않는 경우 물론 잘 작동합니다. $responsefalse, $errno0에 있으며 $errstrphp_network_getaddresses: getaddrinfo failed: No such host is known.으로 설정됩니다. 나는 그것이 포트 80을 안전하지 않게 통과한다면 작동하지 않기 때문에 서버가 다운되거나 호스트 이름에 오타가 발생하지 않는다는 것을 안다. 문제는 SSL로 전환하려고 할 때만 시작됩니다.

이 기능을 사용하려면 어떻게해야합니까?

+0

정말 답과 관련이 없지만 대신 tls 프로토콜을 사용 해본 적이 있습니까? TLSv1은 본질적으로 SSL의 네 번째 버전이며 사실상 SSL 구현으로 널리 대체되었습니다. – Powerlord

답변

37

분명히 들릴지 모르지만 대신 사용해 보셨습니까?

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

//이 요구되지 않거나 있는지 확실하지 않습니다,하지만 PHP Internet Transports pagessltls 예를 가지고있다.

P. 또한 문자열 연결 변수를 사용하는 이유에 대해 궁금한 경우에 대비하여 문자열에 포함 된 변수에 대한 "문제"가 있습니다.

+0

어머나 나는 그런 바보 같은 기분이야. 그것이 한 것은 이것뿐이었습니다! 정말 고맙습니다. 그리고 포함 된 변수와 연결된 변수에 대해서는 애써 둡니다. 우리에게는 모두 단점이 있습니다. – SoaperGEM

관련 문제