Jak wyświetlić na swojej stronie dane z innej strony?

0
$apikey = '';
$apisecret = '';
$nonce = time();
$uri = "https://www.binance.com/bapi/composite/v1/public/cms/article/list/query?type=1&pageNo=1&pageSize=1";
$sign = hash_hmac('sha512', $uri, $apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
$execResult = curl_exec($ch);
$errmsg  = curl_error( $ch );
$obj = json_decode($execResult,true);

print_r($obj);

curl_close($ch);

Jak wkleje powyższy link w przeglądarce to wyświetla dane o które mi chodzi. I kiedyś ten kod też mi działał i

print_r($obj);

wyświetlał te dane, natomiast teraz ten kod nie wyświetla nic, jak to poprawić?

1

prawdopodobnie przekroczyłeś limity i dostałeś bana na IP na kilka minut

For the hard-limits, exceeding the total request weight per minute limit (currently 6,000) will result in an IP ban

poza tym jest teraz wersja 3 api i po co w tym kodzie apikey i apisecret który nie jest używany? Jak masz api key to możesz go użyć, być może zwiększy to limity. Poza tym warto cache'ować wyniki zapytań API żeby ich nie przekroczyć

0

Dodam, że skoro masz tam zmienna errormsg to wyprintuj jej wartość przy błędzie.

0

@obscurity: też pierwsze co pomyślałem że zostałem zbanowany więc uruchomiłem na innym VPS, a potem jeszcze nawet na lokaclhoscie bez zmian - nic nie wyświetla więc nie w tym problem, a Wam działa ten kod? wyświetla? Użycie api key nic nie zmiania.

@jurek1980: wyprintowanie $errormsg nic nie wyświetla jedynie wyprintowanie $execResult wyświetla jakieś krzaki

0

Użyj curl_getinfo() i zobacz czy masz kod odpowiedzi 200
https://www.php.net/manual/en/function.curl-getinfo.php
Krzaki tzn? Nie zidentyfikowane znaki?
Wklej to może tutaj.

Tutaj kod generowany przez AI.
Oczywiście jako poglądowy jak to powinno wyglądać. Dostosuj do potrzeb:

<?php

define('API_KEY', ''); // Ustaw swój API Key
define('API_SECRET', ''); // Ustaw swój API Secret
define('BASE_URI', 'https://www.binance.com/bapi/composite/v1/public/cms/article/list/query?type=1&pageNo=1&pageSize=1');

/**
 * Generuje podpis HMAC dla żądania.
 *
 * @param string $uri
 * @param string $secret
 * @return string
 */
function generateSignature($uri, $secret) {
    return hash_hmac('sha512', $uri, $secret);
}

/**
 * Obsługuje odpowiedź HTTP i przetwarza ją.
 *
 * @param string $response
 * @param int $httpCode
 * @return void
 */
function handleResponse($response, $httpCode) {
    if ($httpCode >= 200 && $httpCode < 300) {
        // Próbuj przetworzyć JSON
        $data = json_decode($response, true);
        if (json_last_error() === JSON_ERROR_NONE) {
            echo "Odpowiedź JSON przetworzona pomyślnie:\n";
            print_r($data);
        } else {
            echo "Błąd w przetwarzaniu JSON: " . json_last_error_msg() . "\n";
        }
    } elseif ($httpCode === 429) {
        echo "Błąd: Zbyt wiele żądań (Too Many Requests).\n";
    } elseif ($httpCode >= 300 && $httpCode < 400) {
        echo "Informacja: Przekierowanie (Redirect).\n";
    } else {
        echo "Błąd HTTP: Kod odpowiedzi $httpCode\n";
        echo "Treść odpowiedzi: $response\n";
    }
}

/**
 * Wysyła żądanie HTTP do API Binance.
 *
 * @return void
 */
function sendRequest() {
    $nonce = time();
    $sign = generateSignature(BASE_URI, API_SECRET);
    
    $ch = curl_init(BASE_URI);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "X-MBX-APIKEY: " . API_KEY,
        "X-MBX-NONCE: $nonce",
        "X-MBX-SIGNATURE: $sign"
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $errorMsg = curl_error($ch);
    
    if ($response === false) {
        echo "Błąd cURL: $errorMsg\n";
    } else {
        handleResponse($response, $httpCode);
    }
    
    curl_close($ch);
}

// Wywołanie funkcji
sendRequest();
0

@jurek1980: kod wygenerowany przez AI zwraca mi Błąd w przetwarzaniu JSON: Control character error, possibly incorrectly encoded

Te "krzaki" print_r($execResult); to:

�����n�F�_e��"�h��)��q#vE.�0��P"A��A�s7�t(�TT��2�� wg�����6�u��x@W��`]�pj������/������ "���n0�~p�ci��Ʒ0χ��O�X�q�뜛n<5�P��U��.��O�����8��n�/g\e�q��7r\��-�f�yN�t�9�b�z�̯0��p���O����v��:.Z,.�i��r�j�.�e��>�u��__.�� ��1>i���#�`�v��a\B���YzZ�H�rY�`�H��B�$��-s���������E^�Б�eU�S���k��b��_?�����C"��'8I�<��ѯ�V�sh�_�C<���/��ɢ!�&F}%�pm���˧� |S����Z-,u�|�4|�����Ѻ=���1FƥnB�$c�R�pAoD{�9t�ܝ$���T(�63eN�3���Q�� �0!�`87�04f70]���YS���3�Ф>XR��2�]w� 9o��p�+}����������`��E�po���mp&1�7e.�yh�U� �Q~�F$�/RJ&J&���j/��!x��4��D&�����w��k�]ycr��$_���XQ�3t ~�y����O�0>D&�N R|_|��2�iJ�����$ ��������c@y�$�c`X�O:�q��o>�$��)c�o��&E�L:*��� �qJ5�\,����!9������\"�˚ƴl!�jI>t=��R�GS%2�!�Lt��k_�Wb6m��R3n�܁ ��>��/�(g��(�5U
print_r(curl_getinfo($ch, CURLINFO_HTTP_CODE));

zwraca:

200
0

Sprawdź kodowanie znaków. W przeglądarce w narzędziach deweloperskich sprawdź nagłówki odpowiedzi.
Sprawdź czy nie zmieniłeś kodowania pliku gdzie zapisujesz kod. Najprościej w edytorze stwórz nowy plik i zapisz go jako UTF-8 bez BOM.
Jeszcze może być tak że endpoint zwraca dane spakowane np. gzip, ale to będziesz pewnie widział w nagłówkach.

Jak to nie pomoże odpal kod z linii komend i wyprintuj output. Ostatnio u kolegi na FF był podobny problem i okazało się że to przeglądarka miała jakieś problemy z czcionką.

2

nie wiedziałem że curl jest taki głupi że nie rozpakowuje sam, ale wygląda na to że response jest skompresowany deflate, dodaj:

curl_setopt($ch,CURLOPT_ENCODING , "");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
0

@obscurity: dodałem i wyświetla. Więc postanowiłem zapisywać te dane do pliku i na lokalhoscie na MacOS działa jednak na VPS na Linux tam gdzie docelowo ma chodzić nie działa. Sprawdzałem na różnych VPS, system aktualny, errors.log nie zwraca żadnych wariningów, uprawnienia są, w pliku zapisze zwykly tekst, tylko nie print_r($obj) bo tam nic nie ma. Coś się musiało zmienić i coś znowu brakuje w kodzie bo ten kod też niedawno chodził. Pewnie coś w kodzie brakuje tylko co? Czemu na Linuxie nie pobiorę tych danych?

        $file3 = dirname(__FILE__) . '/data.txt';
	
		$apikey = '';
		$apisecret = '';
		$nonce = time();
		$uri = "https://www.binance.com/bapi/composite/v1/public/cms/article/list/query?type=1&pageNo=1&pageSize=1";
		$sign = hash_hmac('sha512', $uri, $apisecret);
		$ch = curl_init($uri);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		curl_setopt($ch,CURLOPT_ENCODING , "");
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		$execResult = curl_exec($ch);
		$errmsg  = curl_error( $ch );
		$obj = json_decode($execResult,true);

		file_put_contents($file3,"objj \r\n\r\n".print_r($obj,true),FILE_APPEND);
1

Czemu nie stosujesz bardziej odpornego na problemy kodu, który już masz?
Ten prosty wywali Ci wszystko jak tylko będziesz miał jaką kolwiek inną odpowiedź z serwera.
Po pierwsze używaj PHP_EOL to będziesz miał znak nowej linii nie zależnie od OS. I tutaj stawiał bym że jest pierwszy problem.
Drugi to print_r tekstu. Przed json_decode masz już string w zmiennej.

file_put_contents($file3,"objj" . PHP_EOL . $execResult,FILE_APPEND);
0

@jurek1980: ten kod z AI zwraca to co poniżej. Na localhoscie zadziala. Problem na VPS Linux sprawdzałem na paru różnych dostawców.

objj
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>403 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Request blocked.
We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
<BR clear="all">
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: MVJKsgYJDHcaLWwmq_r34ovWCVyTBl-kL4RADJI6SpFMXdNwodPw==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>
0

No to chyba widać, że nie jest to json. I masz blokadę od Cloudflare.
Podsumujmy teraz obecny problem. Nie działa terez logowanie do pliku, czy nie otrzymujesz danych bo masz 403?

0

do pliku .txt zapis działa. Nie otrzymuje danych do jest 403 a na lokalhoscie dziala tylko Linux VPS nie

0

Pozostaje próba dodania ręcznie user agent:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent

$userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)";
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);

Możesz popróbować ale sądzę że cloudfront blokuje Cię na IP.

0

niestety bez mian, dalej zwraca error 403, na lokalhost dziala. Na Linux VPS od Amazon czy od Vultr zwraca error 403. Są to VPS na ktorych nie mogli mnie zbanować bo nic nie bylo uruchamiane. Jedynie co laczy te VPS to to ze oba maja siedzibe w Japonii tam gdzie binance ma serwery, jeszcze spróbuje postawic nowy VPS w innej lokalizacji z ciekawości zobaczyć czy pójdzie

<?php

define('API_KEY', ''); // Ustaw swój API Key
define('API_SECRET', ''); // Ustaw swój API Secret
define('BASE_URI', 'https://www.binance.com/bapi/composite/v1/public/cms/article/list/query?type=1&pageNo=1&pageSize=1');

/**
 * Generuje podpis HMAC dla żądania.
 *
 * @param string $uri
 * @param string $secret
 * @return string
 */
function generateSignature($uri, $secret) {
    return hash_hmac('sha512', $uri, $secret);
}

/**
 * Obsługuje odpowiedź HTTP i przetwarza ją.
 *
 * @param string $response
 * @param int $httpCode
 * @return void
 */
function handleResponse($response, $httpCode) {
    if ($httpCode >= 200 && $httpCode < 300) {
        // Próbuj przetworzyć JSON
        $data = json_decode($response, true);
        if (json_last_error() === JSON_ERROR_NONE) {
            echo "Odpowiedź JSON przetworzona pomyślnie:\n";
            print_r($data);
        } else {
            echo "Błąd w przetwarzaniu JSON: " . json_last_error_msg() . "\n";
        }
    } elseif ($httpCode === 429) {
        echo "Błąd: Zbyt wiele żądań (Too Many Requests).\n";
    } elseif ($httpCode >= 300 && $httpCode < 400) {
        echo "Informacja: Przekierowanie (Redirect).\n";
    } else {
        echo "Błąd HTTP: Kod odpowiedzi $httpCode\n";
        echo "Treść odpowiedzi: $response\n";
    }
}

/**
 * Wysyła żądanie HTTP do API Binance.
 *
 * @return void
 */
function sendRequest() {
    $nonce = time();
    $sign = generateSignature(BASE_URI, API_SECRET);
    
    $ch = curl_init(BASE_URI);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_ENCODING , "");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)";
    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "X-MBX-APIKEY: " . API_KEY,
        "X-MBX-NONCE: $nonce",
        "X-MBX-SIGNATURE: $sign"
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $errorMsg = curl_error($ch);
    
    if ($response === false) {
        echo "Błąd cURL: $errorMsg\n";
    } else {
        handleResponse($response, $httpCode);
    }
    
    curl_close($ch);
}

// Wywołanie funkcji
sendRequest();

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.