2013年3月17日 星期日

C透過http request到php

遇到一個C語言要傳值到php的問題,這可難倒我了...專科畢業後就幾乎沒碰過C語言了呀~~~

不過網路神人很多,找到一位神人寫好了function,直接拿來套用就幾乎可以用了...

程式如連結

不過卻遇上一個問題,就是當我字串超過60位元時,server就會回傳http 500的錯誤訊息,慘了...我可以肯定php的接收沒有問題,要來複習C語言了...。



既然是字串的問題,那我就從跟字串有關的變數下手了,找了許久,終於找到兇手:




#define MAXSUB 200
ssize_t process_http(int sockfd, char *host, char *page, char *poststr)
{
char sendline[MAXLINE + 1], recvline[MAXLINE + 1];
ssize_t n;
snprintf(sendline, MAXSUB,
"POST %s HTTP/1.0\r\n"
"Host: %s\r\n"
"Content-type: application/x-www-form-urlencoded\r\n"
"Content-length: %d\r\n\r\n"
"%s", page, host, strlen(poststr), poststr);

write(sockfd, sendline, strlen(sendline));
while ((n = read(sockfd, recvline, MAXLINE)) > 0) {
recvline[n] = '\0';
printf("%s", recvline);
}
return n;
}


關鍵在於以上的變數中,答案是MAXSUB,簡單說這個值給得太少,所以我改成了
snprintf(sendline, sizeof(sendline),



就降...

沒有留言: