Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem] "ungZip"


Rekomendowane odpowiedzi

Opublikowano

Witam, otóż mam taki problem z którym nie mogę sobie poradzić w żaden sposób...

Wywołuję zapytanie GET do strony internetowej za pomocą UDF'a WinHTTP...

Problem w tym, że potrzebuję "wydobyć" obrazek o rozszerzeniu jpeg, lecz jest on kodowany gZIP'em i obudowany jest html'em...

 

Moje aktualne ustalenia:

 

Odpowiedź od serwera, którą dostaję:

HTTP/1.1 200 OK
Connection: close
Date: Thu, 29 Aug 2013 12:48:15 GMT

Content-Encoding: gzip
Content-Length: 20579
Content-Type: image/jpeg
Last-Modified: Thu, 29 Aug 2013 12:48:10 GMT
Accept-Ranges: bytes
ETag: "4b03-5063-4e51584bd129f"
Server: Apache/2.2.17
Vary: Accept-Encoding


string zipped: ˙Ř˙ŕWăçĆ
cIřqĄÜčľéż´Ă|:ń׍ü=ŕ_„ú/‚4űż jFŁ®ißtxĂ˙â±ńú¤°VA€ŔqFM˛†]–e¸ľžf«ańřLy<úrĹN5eË9úţ#-âZŐŁŤĹ`ęüž}O.Ćg\_,žy†ĂÓá
X|nc›UËđ)­W+ĂQÍňLącrĽ~;/Ź×3‰ĺś÷6̱őń™Ô1°ÔsLľ¦2ý)˙
binary zipped: 0xFFD8FFE057E3E7C60D6349F871A5DCE81F10BE1AE9BFB407C31F177C3AF1D78DFC3DE05F84FA2F8234FBBF096A1A46A3AE69DF14747F04780FC3FFE2B1F1FAA4B019564180C071464D1CB2865D9665B81CBE9E66AB61F1F84C1679983CFA72C54E356598CB39FAFE232DE25AD5A38DC560EAFC9E7D4F2EC6675C5F2C9E79861F01C3D3E10A587C6E639B55CBF00B29AD572BC351CDF24CB96372BC7E3B2F8FD73389E5189CF736CCB1F5F199D43114B0D4734CBEA60B32FD29FF
unzipped string:
unzipped binary:

 

Otrzymany tą metodą, WinHTTPReadData ustawiony jest domyślnie na charset ANSI.

FileWrite($exceptionFile, $queryHeaders & @CRLF & _
"string zipped: " & $hBuffer & @CRLF)
FileWrite($exceptionFile, "binary zipped: " & StringToBInary($hBuffer) & @CRLF)
FileWrite($exceptionFile, "unzipped string: " & _ZLIB_GZUncompress($hBuffer) & @CRLF)
FileWrite($exceptionFile, "unzipped binary: " & _ZLIB_GZUncompress(StringToBinary($hBuffer)) & @CRLF)

 

Jak widać metoda _ZLIB_GZUncompress nie zwraca mi niczego...

 

0xFFD8FF - wg. google'a jest to sygnatura pliku jpeg, więc wszystko by się zgadzało, lecz według serwera wielkość obrazka to 20579 bajtów, a ja dostaję ledwo 186 bajtów. Gdy próbuję zapisać binarnie do jpeg'a nic się nie ukazuje (sposób zapisywania do jpeg'a na 100% jest dobry, bo w innych przypadkach działa).

 

Tutaj jest kod strony, który ukazuje się po wejściu na stronę z obrazkiem:

<head><meta content="width=device-width; height=device-height;" name="viewport"><link href="resource://gre/res/ImageDocument.css" rel="stylesheet"><link href="resource://gre/res/TopLevelImageDocument.css" rel="stylesheet"><link href="chrome://global/skin/media/TopLevelImageDocument.css" rel="stylesheet"><title>_token.jpg (Obrazek JPEG, 200x50 pikseli)</title></head><body><img class="decoded" alt="http://www.bramki.pl/_token.jpg" src="http://www.bramki.pl/_token.jpg"></body>

Opublikowano

Tak, właśnie chcę go pobrać, w 1-wszym poście zamieściłem odpowiedź serwera wraz z bajtami, które dostałem z tego linku co właśnie podałeś..

 

Po chłopsku w telegraficznym skrócie:

1. Pobrałem metodą GET treść z tego linku co podałeś.

2. Dostałem coś takiego (binarnie):

0xFFD8FFE057E3E7C60D6349F871A5DCE81F10BE1AE9BFB407C31F177C3AF1D78DFC3DE05F84FA2F8234FBBF096A1A46A3AE69DF14747F04780FC3FFE2B1F1FAA4B019564180C071464D1CB2865D9665B81CBE9E66AB61F1F84C1679983CFA72C54E356598CB39FAFE232DE25AD5A38DC560EAFC9E7D4F2EC6675C5F2C9E79861F01C3D3E10A587C6E639B55CBF00B29AD572BC351CDF24CB96372BC7E3B2F8FD73389E5189CF736CCB1F5F199D43114B0D4734CBEA60B32FD29FF

3. Problem w tym, że nie potrafię tego odkodować, gdyż UDF zLib.au3 "wypluwa" mi pustego stringa...

Opublikowano

Okej, poradziłem sobie z tym..

Problemem było niewłaściwe zapisywanie odebranych danych, w poprawnej wersji użyłem _WinHttpBinaryConcat()

oraz wysyłałem zapytanie do serwera o kodowanie Deflate, pomogło :)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...