HttpOpenRequest 和接受 header

HttpOpenRequest and Accept header

HttpOpenRequest 接受一个非常奇怪的格式的 http accept header。可以忽略该参数并添加一个正常的 accept header with HttpAddRequestHeaders later ?

  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 中),但似乎没有记录。

同样,content-type和referer的情况如何?

关于 HttpOpenRequest() 如何接受 Accept 值没有什么奇怪。它只是一个 null-terminated 字符串数组。 Accept header 允许多种类型。 HttpOpenRequest() 将连接值并为您格式化 Accept header。使用 HttpAddRequestHeaders(),您必须手动执行此操作。但是无论你使用 HttpOpenRequest() 还是 HttpAddRequestHeaders() 都没有区别,因为 Accept header 根本不会影响客户端,所以无论你如何将它放入要求。它仅在准备响应时影响服务器。

Referer相同,它不影响客户端,只影响服务器,因此您可以根据需要将其添加到请求中。尽管 HttpOpenRequest()Referer 值有一个很好的简单参数,所以你应该使用它。

另一方面,

Content-Type只能设置为HttpAddRequestHeaders()。但是为 GET 请求指定 Content-Type 没有意义,因为请求中没有负载。 Content-Type 仅适用于带有负载的请求,例如 POSTPUT.