2016-01-31 3 views
0

HttpOpenRequest принимает заголовок http accept в очень странном формате. Можно ли игнорировать этот параметр и добавить обычный заголовок accept с HttpAddRequestHeaders?HttpOpenRequest и принять заголовок

hfile = HttpOpenRequest(hLastConnection, 'GET', '/path', NULL, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_KEEP_CONNECTION, 0); 
    HttpAddRequestHeaders(hfile,'Accept: foobar', 14, HTTP_ADDREQ_FLAG_REPLACE or HTTP_ADDREQ_FLAG_ADD); 

Это действительно работает (в WINE), но кажется недокументированным.

Аналогично, как обстоят дела с контентом и реферированием?

ответ

0

Нет ничего weird о том, как HttpOpenRequest() принимает значения Accept. Это всего лишь массив строк с нулевым завершением. Заголовок Accept позволяет использовать несколько типов. HttpOpenRequest() объединит значения и отформатирует заголовок Accept. С HttpAddRequestHeaders() вы должны сделать это вручную. Но не используете ли вы HttpOpenRequest() или HttpAddRequestHeaders(), поскольку заголовок Accept совсем не влияет на клиента, поэтому не имеет значения, как вы его получите в запросе. Это влияет только на сервер, когда он готовит ответ.

То же самое с Referer, это не влияет на клиента, только на сервер, поэтому добавьте его в запрос, как хотите. Хотя HttpOpenRequest() имеет приятный простой параметр для значения Referer, поэтому вы должны его использовать.

Content-Type, с другой стороны, может быть установлен только с HttpAddRequestHeaders(). Но не имеет смысла указывать Content-Type для запроса GET, так как в запросе нет никакой полезной нагрузки. Content-Type применяется только к запросам с полезной нагрузкой, например POST и PUT.

+0

Ну, у меня уже есть список всех отформатированных заголовков. Было бы странно искать 'accept' в этом списке и отключать его, просто чтобы HttpOpenRequest снова объединил его. Пример фрагмента кода, который я начал использовать, использовал параметр заголовка 'HttpSendRequest' для установки Content-Type. Так что это то же самое, что и «HttpAddRequestHeaders»? Btw, если только один заголовок задан с помощью 'HttpAddRequestHeaders', нет причин для прекращения строки CRLF, есть ли? – BeniBela

+0

Вы можете использовать 'HttpAddRequestHeaders()' или 'HttpSendRequest()' для указания дополнительных заголовков по мере необходимости, но в обоих случаях каждому отдельному заголовку нужен CRLF в конце его. –

+0

Но не на последнем заголовке, или? Потому что я никогда не использовал CRLF, и это сработало. (Мысль о том, чтобы изменить его, чтобы иметь CRLF ", но никогда не изменяйте запущенную систему") – BeniBela