首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >解析HTTP标头

解析HTTP标头
EN

Stack Overflow用户
提问于 2008-09-17 03:49:47
回答 4查看 33.3K关注 0票数 18

我对用C语言构建一个小型、高效的web服务器产生了新的兴趣,并且在解析HTTP报头中的POST方法时遇到了一些问题。关于如何从“发布的”数据中检索名称/值对,有人有什么建议吗?

代码语言:javascript
复制
POST /test HTTP/1.1
Host: test-domain.com:7017
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://test-domain.com:7017/index.html
Cookie: __utma=43166241.217413299.1220726314.1221171690.1221200181.16; __utmz=43166241.1220726314.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 25

field1=asfd&field2=a3f3f3
// ^-this

我看不到任何具体的方法来检索作为一个整体的底线,并确保它每次都有效。我对任何东西都不喜欢硬编码。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-17 03:55:15

您可以通过搜索换行符或更具体地说\r\n\r\n来检索名称/值对(在此之后,邮件正文将开始)。

然后,您可以简单地用&拆分列表,然后在名称/值对的=之间拆分每个返回的字符串。

请参阅HTTP 1.1 RFC

票数 20
EN

Stack Overflow用户

发布于 2008-12-22 12:07:39

一旦在标题中有了Content-Length,就知道要在空行后面读取的字节数。如果由于任何原因(GET或POST) Content-Length不在标题中,这意味着在空行(crlf)之后没有什么可读的。

票数 4
EN

Stack Overflow用户

发布于 2008-09-17 04:00:27

您需要继续将流解析为headers,直到您看到空行。其余的是POST数据。

您需要为post数据编写一个小解析器。您可以使用C库例程来做一些既快捷又麻烦的事情,比如index、strtok和sscanf。如果您在“小”的定义中有足够的空间,那么您可以使用正则表达式库,甚至使用flex和bison来做一些更复杂的事情。

至少,我认为这回答了你的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/79780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档