CURL kullanarak HTTPS sitesine bağlanamıyor.

11 Cevap php

Ben ödeme için güvenli bir ağ geçidine cURL (son sürüm) kullanılarak bağlayan bir site var.

Sorun cURL daima 0 uzunluğu içeriğini döndürür. Ben sadece başlıkları olsun. Ve ben başlıkları dönmek için cURL ayarlandığında yalnızca. I yerine aşağıdaki bayrakları sahiptir.

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, $gatewayURI);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_POST, 1);

Döndürülen başlığıdır

HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Date: Tue, 25 Nov 2008 01:08:34 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Length: 0
Content-Type: text/html
Set-Cookie: ASPSESSIONIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; path=/
Cache-control: private

Ben de farklı siteleri cURL'ing denedim ve içerik cezası dönmek. Ben sorun https bağlantısı ile ilgisi olabileceğini düşünüyorum.

Ben firma ile konuştum ve yararsızdır.

Başkasının bu hatayı deneyimli ve çevresinde bir iş biliyor mu? Ben cURL hendek ve denemek ve kullanmak gerekir fsockopen()?

Teşekkür ederim. :)

11 Cevap

Ayrıca) (curl_error de hata mesajlarını kontrol denemelisiniz. Sen bir kez her curl_ * fonksiyonundan sonra bunu yapmak gerekebilir.

http://www.php.net/curl_error

I had the same problem today. Curl comes with an outdated file to authenticate HTTPS certificates from.

dan yeni bir tane olsun:

http://curl.haxx.se/ca/cacert.pem

sitenizdeki bazı dir içine kaydedin

ve eklemek

curl_setopt ($curl_ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");

Her isteği :-) için

CURLOPT_VERIFYPEER ve CURLOPT_VERIFYHOST devre dışı bırakma hakkında herhangi bir salak yorum GÖRMEZDEN! Yani ortadaki adam saldırısına karşı savunmasız kodunuzu bırakır!

Not: Bu kesinlikle üretim kullanmak değildir. Hızlı bir şekilde ayıklamak istiyorsanız, bu yararlı olabilir. Aksi takdirde, yukarıda SchizoDuckie cevabı @ kullanın lütfen.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

Sadece onları ekleyebilirsiniz. Bu çalışıyor.

Sadece çok benzer bir sorun vardı ve ekleyerek bunu çözdü

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

Görünüşe göre ben başka bir yere ve php-kıvrılma yönlendirmeler getiriliyor kulüpler sitesi varsayılan yönlendirmeleri takip etmez.

PHP / Curl ile bir şey test yapsam, ben PHP liman benim seçenekleri zaman çalışır anlamaya, ilk komut satırından deneyin, ve.

(PHP Windows 5.4.16): Ben bu yardım bir durum vardı

curl_setopt($ch, CURLOPT_SSLVERSION, 3);

i stream_create_context kullanarak file_get_contents kullanılan ve iyi çalışıyor ...:

$postdataStr = http_build_query($postdataArr);

$context_options = array (
        'http' => array (     // this will allways be http!!!
            'method' => 'POST',
            'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
                . "Content-Length: " . strlen($postdataArr) . "\r\n"
    			. "Cookie: " . $cookies."\r\n"
            'content' => $postdataStr
            )
        );

$context = stream_context_create($context_options);
$HTTPSReq = file_get_contents('https://www.example.com/', false, $context);

Bazen https ile hataları için değil son sürüme Curl sertifikaları yükseltmek zorunda.

onlar bunu yapmak için izin olmayabilir, sizin ağ geçidi için güvenli iletişimi test yerden web hosting şirketi de bir sorun olabilir.

Ayrıca uzak ana bağlanmadan önce sağlanmalıdır bir kullanıcı adı, parola olabilir.

veya IP başlatmak için iletişim için uzak sunucu için onaylanmış IP listesinde olması gerekebilir.

Ben yeni bir uygulama projesi bu hatayı keşfetti. Ben komut satırından veya tarayıcı penceresinden çalıştırmak için yazıyordu, ben soruyordu belgenin göreli URL'sini almak için sunucu algılama kullanıyordu. Sorun site https olan, oldu, ve ben erişimi http://%28same sunucusu) için çalıştı, her zaman, yardımsever https olarak değiştirdim kıvırın.

Bu tarayıcı çalışıyor, ancak komut satırından, ben o zaman bile bir SSL hata alıyorum hem de sahte ayarlanmış doğrulamak istiyorum. Ne yapmak vardı,

1) $ _SERVER ['HTTP_HOST'] edin. $ _SERVER ['HTTP_HOST'].: Eğer varsa, (? "Http://" $ _SERVER ['HTTPS'] "https://") kullanın

2) $ _SERVER ['BILGISAYARADı'] Giriş ve üretim sunucu eşleşti eğer, https URL sağlar. ("Https:// (servername)")

Ne koşul Geçerse 3), ben farklı bir sunucuda komut satırı çalışan ve "http://localhost" kullanımı anlamına geliyor.

Şimdi, bu çalıştı, ama bu kesmek. Ayrıca, diğer tarafta (https) yalnız benim URL sol ise bir sunucuda (https) cURL, benim URL değişti anlamaya yapmadım.

Tuhaf.

Sen POST yöntemi kullanılarak, ancak veri bir dizi sağlanmaktadır? Örneğin

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);