我正在编写一个代理服务器,我遇到了一个奇怪的错误,我希望有人能够解释。
我收到来自客户端的 GET 请求的第一行。例如,客户端将发送请求:
GET http://en.wikipedia.org/wiki/Special:Random HTTP/1.0
Host: en.wikipedia.org
...
我会将此请求转发给服务器。
但是,对于某些网址,我会遇到一个问题:
GET http://map.media6degrees.com/orbserv/curl=http%3A%2F%2Fwww.masteringemacs.org%2Farticles[trunc] HTTP/1.0
我将这一行读入char buffer[MAXLINE_LENGTH]
,它的长度足以容纳字符串。
当我打印收到的获取请求时
printf(buffer);
打印出来的字符串是:
GET http://map.media6degrees.com/orbserv/hbpix?pixId=2869&curl=http0X0.0000000000015P-10220.0000000.000000www.masteringemacs.org0.000000articles0.00000020100.000000110.000000010.000000running-shells-in-emacs-overview204741995430849962482228271154502456423284733956118041206315879167624419264810411254941012469231829496710329852458403099883653794777355548418601638730167027236864.000000 HTTP/1.0
似乎 %3A、%2F 等已被格式化。
当我运行时printf("%s", buffer);
,我得到正确和预期的输出
编辑:我明白为什么会这样;我对为什么会这样发生很感兴趣。printf 是“字符串格式”的值是否来自堆栈上的某个任意区域?%3A et al 是有效的格式字符串吗?