2017-06-09 47 views
0

只是關於使用FastCGI的一個簡短問題。到目前爲止,我已經編程了大約一個月,我發現很難將我的頭圍繞在FastCGI上。FastCGI和查詢字符串(在C中工作)

基本上這是我的問題。

  1. 如何設置我的查詢字符串?

  2. 從編程的角度來看,它甚至可以「設置」嗎?

  3. 如果這是我必須設置的東西,我會在哪裏做?

代碼:

while(FCGI_Accept() >= 0) { 

    if (getenv("QUERY_STRING") != NULL) 
    { 
     strcpy(query_string, getenv("QUERY_STRING")); 

     if (query_count == 0) 
     { 
      printf("Content-type: text/html\r\n\r\n"); 
      printf("Query string has no data pairs!\n"); 
      continue; 
     } 
    } 
    else 
    { 
     printf("Content-type: text/html\r\n\r\n"); 
     printf("Query string does not exist!\n"); 
     continue; 
    } 
} 

下面的代碼總是返回NULLgetenv(QUERY_STRING)

+0

通常,查詢字符串由Web服務器設置。例如,如果您打開瀏覽器,將其指向您的Web服務器並輸入一個如下所示的URL ...(oops),http://my.server.com/?name=fred&gender=male然後查詢字符串將是問號後的東西。 –

+0

@BradS。非常感謝,這讓我對從哪裏開始有所瞭解。這可能是一個愚蠢的問題,但我如何將它指向我的Web服務器?我已經寫了一個函數來解析我的query_string到一個名稱 - 值對列表中,但是如果我保留一個NULL字符串哈哈是沒用的。 – Damian

+0

我真的需要更多的上下文。我不知道你是使用web服務器運行cgi還是使用簡單的演示程序來實驗庫。我也想知道如果你知道如何在你的主機操作系統上設置環境變量......那麼,讓我們從一個簡單的hello世界程序開始......並且替換printf(「Hello,world!\ n」)這一行。 with,printf(「%s \ n」,getenv(「QUERY_STRING」));你知道如何在命令行上運行程序並設置環境變量,以便程序在不編譯的情況下打印出不同的東西嗎? –

回答

0

所有的表單變量從瀏覽器中的查詢字符串的HTTP服務器傳遞(GET的http請求不是POST) HTML頁面通常會有各種形式的變量 HTML表單如

<HTML> 

<BODY> 
    <FORM METHOD=GET ACTION="http://localhost:8888/login.cgi"> 
    <input name="ID" type="text"> 
    <input name=submit type="submit" value="Submit"> 

    </FORM> 
</BODY> 
</HTML> 

的用戶將填寫表單並通過點擊提交按鈕(這只是另一個表單變量)來提交,瀏覽器向通過URL標識的web服務器發送GET請求,如http://localhost:8888/login.cgi?ID=aa&submit=Submit其中localhost:8888標識運行web服務器的ip和端口,/login.cgi告訴web服務器哪個cgi將服務給定的http請求,查詢字符串是後面的文本?即ID = aa & submit =提交。

Web服務器或(由web服務器提供的庫綁定到CGI中)解析http請求數據,包括查詢字符串,http請求標頭並將它們作爲環境變量傳遞給cgi程序。查詢字符串在env變量QUERY_STRING中傳遞。 CGI程序應該在其應用程序邏輯中使用這些值