Возможно, вам необходимо указать правильный Content-Type в заголовке HTTP.Это больше не просто «текст».
Строки ответа HTTP должны заканчиваться CRLF - читайте стандарт.Фактически, большинство интернет-протоколов требуют окончания строки.
Вы не указали Content-Encoding;Вы не указали длину данных.Я думаю, что вы должны делать оба.
Почему бы вам не отправить запрос на веб-сервер, который правильно обрабатывает запросы для небольшого файла JPEG, и посмотреть, что он генерирует.Вы бы проверили, что URL работает в браузере, показывая вам изображение, затем вы использовали бы низкоуровневую программу (возможно, даже telnet web.server.example.com 80
), чтобы отправить запрос и собрать ответ.Сравните это с тем, что генерирует ваш код.
Или вы можете прочитать стандарт.
Вы должны проверить, что количество записанных байтов было числом, которое вы намеревались написать ().Если вы получили короткую запись, попробуйте снова написать остальную часть, поэтому вам нужен цикл вокруг вашей записи (или функция, которая содержит цикл).Вы также должны сообщать об ошибках, если вам сообщают об ошибке (например, write()
).
Вот сценарий оболочки, который отправляет запрос на определенный сервер и собирает 368-байтовый gif:
{
echo "GET /img/mailtruck.gif HTTP/1.0^M"
echo "^M"
} |
tee request |
nc my.earthlink.net 80
Символы ^M
означают возврат каретки;Я использовал CONTROL-V и CONTROL-M , чтобы ввести их.Программа nc
(netcat) отправляет запрос на сервер.Ответ возвращается, начиная с:
HTTP/1.1 200 OK
Cache-Control: Tue, 25 Jan 2011 16:34:03 GMT
ETag: W/"368-1219455793000"
Last-Modified: Sat, 23 Aug 2008 01:43:13 GMT
Content-Type: image/gif
Content-Length: 368
Date: Tue, 25 Jan 2011 08:34:03 GMT
Server: Apache-Coyote/1.1
Connection: Keep-Alive
Полный ответ в формате шестнадцатеричного дампа:
0x0000: 48 54 54 50 2F 31 2E 31 20 32 30 30 20 4F 4B 0D HTTP/1.1 200 OK.
0x0010: 0A 43 61 63 68 65 2D 43 6F 6E 74 72 6F 6C 3A 20 .Cache-Control:
0x0020: 54 75 65 2C 20 32 35 20 4A 61 6E 20 32 30 31 31 Tue, 25 Jan 2011
0x0030: 20 31 36 3A 33 32 3A 35 39 20 47 4D 54 0D 0A 45 16:32:59 GMT..E
0x0040: 54 61 67 3A 20 57 2F 22 33 36 38 2D 31 32 31 39 Tag: W/"368-1219
0x0050: 34 35 35 37 39 33 30 30 30 22 0D 0A 4C 61 73 74 455793000"..Last
0x0060: 2D 4D 6F 64 69 66 69 65 64 3A 20 53 61 74 2C 20 -Modified: Sat,
0x0070: 32 33 20 41 75 67 20 32 30 30 38 20 30 31 3A 34 23 Aug 2008 01:4
0x0080: 33 3A 31 33 20 47 4D 54 0D 0A 43 6F 6E 74 65 6E 3:13 GMT..Conten
0x0090: 74 2D 54 79 70 65 3A 20 69 6D 61 67 65 2F 67 69 t-Type: image/gi
0x00A0: 66 0D 0A 43 6F 6E 74 65 6E 74 2D 4C 65 6E 67 74 f..Content-Lengt
0x00B0: 68 3A 20 33 36 38 0D 0A 44 61 74 65 3A 20 54 75 h: 368..Date: Tu
0x00C0: 65 2C 20 32 35 20 4A 61 6E 20 32 30 31 31 20 30 e, 25 Jan 2011 0
0x00D0: 38 3A 33 32 3A 35 39 20 47 4D 54 0D 0A 53 65 72 8:32:59 GMT..Ser
0x00E0: 76 65 72 3A 20 41 70 61 63 68 65 2D 43 6F 79 6F ver: Apache-Coyo
0x00F0: 74 65 2F 31 2E 31 0D 0A 43 6F 6E 6E 65 63 74 69 te/1.1..Connecti
0x0100: 6F 6E 3A 20 4B 65 65 70 2D 41 6C 69 76 65 0D 0A on: Keep-Alive..
0x0110: 0D 0A 47 49 46 38 39 61 25 00 21 00 B3 08 00 FD ..GIF89a%.!.....
0x0120: 9C 00 DE 36 03 58 44 29 19 15 04 D2 D3 D3 F1 85 ...6.XD)........
0x0130: 66 A4 A4 A3 FE FE FE FE FE FE 00 00 00 00 00 00 f...............
0x0140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 21 ...............!
0x0150: F9 04 01 00 00 08 00 2C 00 00 00 00 25 00 21 00 .......,....%.!.
0x0160: 00 04 FF 10 C9 49 AB BD 38 EB 49 84 27 5B 78 19 .....I..8.I.'[x.
0x0170: 1E 60 7A 86 28 76 82 E9 9E 02 A8 8E E5 6B 03 E8 .`z.(v.......k..
0x0180: CC D5 77 FF A9 A4 56 6F E8 12 84 58 C4 E4 69 43 ..w...Vo...X..iC
0x0190: 52 26 03 81 C1 A5 83 20 0C 9C 43 28 54 6A B1 22 R&..... ..C(Tj."
0x01A0: 3C 03 21 56 5B 28 6C A7 03 EB 60 CD CB 06 08 E5 <.!V[(l...`.....
0x01B0: F2 B9 0B 5E B3 C3 6E F3 5B 1F CD D8 FF 6C 62 00 ...^..n.[....lb.
0x01C0: 64 7A 70 5A 5C 16 02 77 80 61 2D 01 02 5A 04 01 dzpZ\..w.a-..Z..
0x01D0: 07 01 72 73 15 4D 51 8A 8C 26 6B 50 66 72 96 7D ..rs.MQ..&kPfr.}
0x01E0: 89 2F 60 9B 6B 38 9E 7B 7A 83 87 74 37 8B 2D 9B ./`.k8.{z..t7.-.
0x01F0: 50 86 50 AD 97 13 82 36 9B A9 61 B4 7C 66 A7 32 P.P....6..a.|f.2
0x0200: 12 4D 44 01 83 76 9F 96 7A 8D 6B C3 06 C7 4A 51 .MD..v..z.k...JQ
0x0210: 5A 95 05 70 7C 03 06 24 69 13 DA 04 4F D4 BF 95 Z..p|..$i...O...
0x0220: 87 69 DE 14 DA 41 6E E1 E1 1E ED 31 98 50 EE 36 .i...An....1.P.6
0x0230: EB EC EF 55 06 C3 12 56 05 00 05 EE 62 D4 20 1D ...U...V....b. .
0x0240: B2 A7 A1 83 36 13 FE 3E 48 22 37 40 53 BE 0D 2C ....6..>H"7@S..,
0x0250: B4 F1 F3 67 80 8F 22 16 0F 81 A0 30 60 E2 98 16 ...g.."....0`...
0x0260: 45 07 1D 8C E8 A0 23 40 E2 20 61 22 47 5A 08 82 E.....#@. a"GZ..
0x0270: 2E 46 44 95 19 58 94 84 39 43 1B CD 9B 30 23 00 .FD..X..9C...0#.
0x0280: 00 3B .;
0x0282:
Запрос минимален;ответ, вероятно, нет, но вам придется экспериментировать с тем, что вы должны отправить.