żądanie POST cURL'em zwraca 500

0

Witam

Wysyłam żądanie POST cURL'em z jednego serwera do drugiego. Oba serwery mają swoje certyfikaty SSL. W apache2'owym access.log mam błąd 500.
Poniżej wycinek mojego skryptu:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::PANEL_URL);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

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

$response = curl_exec($ch);

curl_close($ch);

Dodaj, że gdy oba serwery nie miały SSL'a, to wszystko działało.

Pozdrawiam KL.

0

Wyświetl sobie błędy curla. Curl domyślnie nie ufa nieznanym certyfikatom. Jeśli certyfikat SSL został wystawiony przez niezaufanego dostawcę, to curl zgłosi błąd.

Można to obejść przez ustawienie ścieżki do pliku z certyfikatem (opcja CA_INFO).

Edit: W sumie to chyba nie jest to, skoro masz wyłączone weryfikowanie certyfikatów. A co mówi plik z logiem błędów? Sam access log to za mało.

1

Teraz zgaduję, bo nie miałem podobnego problemu, ale przy szyfrowanej komunikacji zmienia się port i adres - 443 i HTTPS, może gdzieś masz błąd z obsługą tych rzeczy (np. wpisany na sztywno adres z http://). Ten Curl wygląda ok.

0

curl_error($ch) zwraca pusty string

ale spróbowałem przekierować strumień błędów CURLOPT_STDERR do pliku i mam taką treść:

*   Trying **[ADRES_IP]**...
* TCP_NODELAY set
* Connected to **[DOMENA]** (**[ADRES_IP]**) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: OU=Domain Control Validated; OU=Provided by DOMENY.PL sp. z o.o.; OU=Domeny.pl SuperFAST SSL; CN=**[DOMENA]**
*  start date: Apr  6 00:00:00 2018 GMT
*  expire date: Apr  5 23:59:59 2020 GMT
*  issuer: C=PL; ST=Ma\U0142opolskie; L=Kraków; O=DOMENY.PL sp. z o.o; CN=DOMENY SSL DV Certification Authority
*  SSL certificate verify ok.
> POST /workers/add HTTP/1.1
Host: **[DOMENA]**
Accept: */*
Content-Length: 3032
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------a9f67b473dcff264

< HTTP/1.1 100 Continue
* HTTP 1.0, assume close after body
< HTTP/1.0 500 Internal Server Error
< Date: Tue, 01 May 2018 09:45:53 GMT
< Server: Apache/2.4.18 (Ubuntu)
< Set-Cookie: ci_session=**[SESJA]**; expires=Tue, 01-May-2018 11:45:53 GMT; Max-Age=7200; path=/; domain=.**[DOMENA]**
< Content-Length: 0
< Connection: close
< Content-Type: text/html; charset=UTF-8
< 
* Closing connection 0

na pogrubiono, dużymi literami i w kwadratowych nawiasach zaznaczyłem prywatne dane

0

Serwer który odpytujesz prawdopodobnie nie obsługuje nagłówka Expect 100-Continue. Ustaw w curl wersje protokołu HTTP na 1.0 zamiast 1.1 (domyślne) albo popraw konfigurację serwera jeśli masz taką mozliwosc.

0

no właśnie, teraz tak pomyślałem, że ten błąd 500 jest w apachowym access.log po stronie servera docelowego, więc problem nie jest z curlem tylko blokowanie jest po stronie servera do którego wysyłać post'a.

0

ta zmiana, którą zaproponowałeś nic nie pomogła, chociaż zwrotka nie zawiera już wpisu "Expect: 100-continue"..
a może to jakaś blokada na porcie 443 ?

1

Rozwiązane.
Okazało się, że to mój błąd po stronie serwera. Skrypt z curlem wyglądał tak samo jak w pierwszym poście, ale bez VERIFYPEER i VERIFYHOST.
Przepraszam za kłopot, i dzięki za zaangażowanie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1