2012-01-09 34 views
0

您是否知道C中的任何HTTP客戶端庫(帶有SSL支持),還允許與遠程服務器直接通信?C中的任何HTTP庫允許與服務器直接通信?

我有一個客戶端 - 服務器應用程序,其中客戶端使用HTTP在服務器中啓動會話,然後通知服務器將連接從HTTP切換到不同的協議。所有通信都封裝在SSL中。它是用Perl編寫的,運行良好,但我正在考慮實現C中的客戶端。我知道libcurl允許您訪問底層套接字,但由於SSL要求,這是不夠的。

回答

1

請注意,libcurl本身不執行SSL部分,它使用OpenSSL。因此,如果您可以在第一次HTTP交互之後從libcurl獲取套接字句柄,並使用它使用的會話密鑰(需要一些spelunking),那麼您可以從該點直接繼續使用OpenSSL。

+0

看來你需要的功能是Curl_ssl_getsessionid,這是沒有記錄。所以我的回答只有在你沒有使用未記錄的接口的限制時纔是一個選項。 – 2012-01-09 12:23:59

+0

謝謝你指點我這個方向。我沒有看到如何使用Curl_ssl_getsessionid,但通過閱讀curl源代碼,我發現CURL會話實際上是指向存儲連接緩存的「struct SessionHandle」的指針。所以理論上我應該可以使用類似的方式直接寫入SSL通道: 'CURL * curl = ...; struct SessionHandle * handle =(struct SessionHandle *)curl; struct connectdata * conn = handle-> state.connc [0]; SSL * ssl = conn-> ssl [0] .handle;' – Joni 2012-01-09 18:30:54

+0

我寧願說你應該看看CURLOPT_CONNECT_ONLY,然後curl_easy_recv/curl_easy_send。不需要在源代碼中捅出或不在API之外。 – 2012-01-09 21:48:01

0

聽起來像你想Web Sockets。不知道是否有C庫可用。我會假設,如果你挖。

+0

謝謝!我之前沒有看過websockets。我試圖達到的是非常相似的。看起來像這些人有他們的C庫:http://warmcat.com/ – Joni 2012-01-10 08:33:24

1

我認爲你必須尋找this否則你必須有它自己寫,就像this

+0

我也會推薦這個簡單的HTTP文檔:http://www.jmarshall.com/easy/http/ – nob 2012-01-09 13:29:46

相關問題