對於類,我正在編寫一個基本代理服務器。代理服務器,在發送給主機之前格式化瀏覽器請求
在教授的例子(這是JAVA),他把瀏覽器的請求時,它看起來像這樣:
GET http://www.cs.rpi.edu/index.html HTTP/1.1
Host: www.cs.rpi.edu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0
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
Proxy-Connection: keep-alive
Cookie: __utma=138860844.163543584.1329315062.1329315062.1329315062.1;__utmz=138860844.1329315062.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)
Cache-Control: max-age=0
和格式它看起來像這樣,加上接受和用戶代理頭,前它發送到主機服務器:
GET /index.html HTTP/1.1
Host: www.cs.rpi.edu
我所做的也是這個,但現在我碰到2個問題,和1個問題:
答消息發送給服務器還好,BEC ause connect()和write()不會給我任何錯誤,但是當我讀取()服務器響應(可能錯誤地期望HTML?)時,程序會凍結並永遠坐着直到我按Ctrl + C。我不能爲我的生活找到原因:
/* write a message out on the socket connection */
int n = write(sock, clientrequest, strlen(clientrequest));
if (n < strlen(clientrequest))
{
perror("write() failed");
return EXIT_FAILURE;
}
printf("Made it here.\n\n");
char buffer2[1024];
n = read(sock, buffer2, 1024);
if (n < 1)
{
perror("read() failed");
return EXIT_FAILURE;
}
else
{
buffer2[n] = '\0';
printf("Rcvd message from server: \n\n----\n\n%s\n\n----\n\n", buffer2);
}
printf("But not here.\n\n");
B.說我連接到像www.google.com這樣的東西。沒有/index.html,那麼在格式化請求中的GET之後應該怎麼辦?
C.爲什麼請求需要以這種方式進行格式化,而不是按原樣發送?
我甚至讀完之前,沒有2個換行符。我現在要去改變。非常感謝。我也知道,我完全忘了。 – Aerovistae 2012-03-15 04:13:59