Błąd cURL: URL rejected: No host part in the URL

Błąd cURL: URL rejected: No host part in the URL
astick360
  • Rejestracja:około miesiąc
  • Ostatnio:około miesiąc
  • Postów:5
0

Dzień dobry, potrzebuje wykonac skrypt w moim API, niestety zwraca mi błąd :
Błąd cURL: URL rejected: No host part in the URL
Nie mogę dociec skąd pochodzi błąd, ponieważ po localhost skrypt działa, a po wrzuceniu w system gdzie jest wykonywany otrzymuję taką wiadomość. Dodam, że logi w systemie dotyczą tylko generowania tokenów uzytkownikow [AJAX]

Kopiuj
function callApi($url, $method, $data, $username, $password) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json'
    ));
    if (!empty($data)) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    }
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        die("Błąd cURL: " . curl_error($ch));
    }
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($httpCode < 200 || $httpCode >= 300) {
        die("Błąd API: HTTP code $httpCode, odpowiedź: " . $response);
    }
    return json_decode($response, true);
}
edytowany 2x, ostatnio: Riddle
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
  • Postów:3505
0

Jak przekazujesz URL w curl_init to masz już połączenie zainicjowane.
Spróbuj zamiast przekazać URL w opcjach i dopiero zainicjować połączenie.
Czyli coś takiego:

Kopiuj
curl_init();
CURLOPT_URL => 'http://myremoteservice/',
// inne opcje
// przekazanie opcji do połączenia
// dopiero inicjalizacja i exec

curl_exec();

Jak w dokumentacji
https://www.php.net/manual/en/function.curl-init.php

edytowany 1x, ostatnio: jurek1980
astick360
  • Rejestracja:około miesiąc
  • Ostatnio:około miesiąc
  • Postów:5
0
jurek1980 napisał(a):

Jak przekazujesz URL w curl_init to masz już połączenie zainicjowane.
Spróbuj zamiast przekazać URL w opcjach i dopiero zainicjować połączenie.
Czyli coś takiego:

Kopiuj
curl_init();
CURLOPT_URL => 'http://myremoteservice/',
// inne opcje
// przekazanie opcji do połączenia
// dopiero inicjalizacja i exec

curl_exec();

Jak w dokumentacji
https://www.php.net/manual/en/function.curl-init.php

Ten sam błąd

Kopiuj
function callApi($url, $method, $data, $username, $password) {
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Accept: application/json'
    ));
    
    if (!empty($data)) {
        $jsonData = json_encode($data);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Accept: application/json',
            'Content-Length: ' . strlen($jsonData)
        ));
    }
    
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        die("Błąd cURL: " . curl_error($ch));
    }
    
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode < 200 || $httpCode >= 300) {
        die("Błąd API: HTTP code $httpCode, odpowiedź: " . $response);
    }
    
    return json_decode($response, true);
}
edytowany 1x, ostatnio: Riddle
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10086
1
astick360 napisał(a):

Dzień dobry, potrzebuje wykonac skrypt w moim API, niestety zwraca mi błąd :
Błąd cURL: URL rejected: No host part in the URL
Nie mogę dociec skąd pochodzi błąd, ponieważ po localhost skrypt działa, a po wrzuceniu w system gdzie jest wykonywany otrzymuję taką wiadomość. Dodam, że logi w systemie dotyczą tylko generowania tokenów uzytkownikow [AJAX]

Jak wołasz tą funkcję? Błąd mówi że link nie zawiera hosta, czyli tak jakbyś używał względnego url, np. /users/1. Możesz pokazać URL pod który próbujesz strzelić?

astick360
  • Rejestracja:około miesiąc
  • Ostatnio:około miesiąc
  • Postów:5
0
Riddle napisał(a):
astick360 napisał(a):

Dzień dobry, potrzebuje wykonac skrypt w moim API, niestety zwraca mi błąd :
Błąd cURL: URL rejected: No host part in the URL
Nie mogę dociec skąd pochodzi błąd, ponieważ po localhost skrypt działa, a po wrzuceniu w system gdzie jest wykonywany otrzymuję taką wiadomość. Dodam, że logi w systemie dotyczą tylko generowania tokenów uzytkownikow [AJAX]

Jak wołasz tą funkcję? Błąd mówi że link nie zawiera hosta, czyli tak jakbyś używał względnego url, np. /users/1. Możesz pokazać URL pod który próbujesz strzelić?

Kopiuj
$apiUrl = "https://coś.domena.eu"

Przykładowo $createCampaignUrl = $apiUrl . "/api/campaigns";

edytowany 1x, ostatnio: Riddle
PaulGilbert
  • Rejestracja:około 7 lat
  • Ostatnio:około 19 godzin
  • Postów:931
2

na górze masz nazwę zmiennej url a tu apiUrl, może przez to jej nie widzi.

astick360
  • Rejestracja:około miesiąc
  • Ostatnio:około miesiąc
  • Postów:5
0
PaulGilbert napisał(a):

na górze masz nazwę zmiennej url a tu apiUrl, może przez to jej nie widzi.

tak bo zmienna $createCampaignUrl wchodzi na miejsce $url w funkcji

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10086
0

Uruchomiłem Twój kod z pierwszego posta z adresem https://4programmers.net/ i działa w porządku. Podtrzymuję to co pisałem wcześniej - prawdopodobnie przekazujesz niepoprawny URL.

Podglądnij z jakim faktycznie URL strzelasz curl, możesz to zrobić np tak:

Kopiuj
die("Błąd cURL, using url:" . json_encode($url));
astick360
  • Rejestracja:około miesiąc
  • Ostatnio:około miesiąc
  • Postów:5
0

do każdej funkcji przekazałem $apiUrl i zadziałało, dziękuje za podpowiedzi.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.