added support for POST method and alternate ports (part of patch 649438)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21819 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-07-09 22:22:47 +00:00
parent 1f1c42109d
commit f9133b3200
3 changed files with 24 additions and 5 deletions

View File

@@ -55,7 +55,8 @@ All:
- fixed bug with deleting entries at root level in wxFileConfig - fixed bug with deleting entries at root level in wxFileConfig
- chkconf.h now includes platform-specific versions (for MSW - chkconf.h now includes platform-specific versions (for MSW
and Mac) which contain some tests that were in setup.h and Mac) which contain some tests that were in setup.h
- Added event sink argument to wxEvtHandler::Connect() - added event sink argument to wxEvtHandler::Connect()
- added support for POST method and alt ports to wxHTTP (Roger Chickering)
wxBase: wxBase:

View File

@@ -28,11 +28,12 @@ protected:
wxStringToStringHashMap m_headers; wxStringToStringHashMap m_headers;
bool m_read, m_proxy_mode; bool m_read, m_proxy_mode;
wxSockAddress *m_addr; wxSockAddress *m_addr;
wxString m_post_buf;
public: public:
wxHTTP(); wxHTTP();
~wxHTTP(); ~wxHTTP();
bool Connect(const wxString& host); bool Connect(const wxString& host, unsigned short port = 0);
bool Connect(wxSockAddress& addr, bool wait); bool Connect(wxSockAddress& addr, bool wait);
bool Abort(); bool Abort();
wxInputStream *GetInputStream(const wxString& path); wxInputStream *GetInputStream(const wxString& path);
@@ -41,12 +42,14 @@ public:
void SetHeader(const wxString& header, const wxString& h_data); void SetHeader(const wxString& header, const wxString& h_data);
wxString GetHeader(const wxString& header); wxString GetHeader(const wxString& header);
void SetPostBuffer(const wxString& post_buf);
void SetProxyMode(bool on); void SetProxyMode(bool on);
protected: protected:
typedef enum { typedef enum {
wxHTTP_GET, wxHTTP_GET,
wxHTTP_POST,
wxHTTP_HEAD wxHTTP_HEAD
} wxHTTP_Req; } wxHTTP_Req;
bool BuildRequest(const wxString& path, wxHTTP_Req req); bool BuildRequest(const wxString& path, wxHTTP_Req req);

View File

@@ -43,6 +43,7 @@ wxHTTP::wxHTTP()
m_addr = NULL; m_addr = NULL;
m_read = FALSE; m_read = FALSE;
m_proxy_mode = FALSE; m_proxy_mode = FALSE;
m_post_buf = wxEmptyString;
SetNotify(wxSOCKET_LOST_FLAG); SetNotify(wxSOCKET_LOST_FLAG);
} }
@@ -93,6 +94,11 @@ wxString wxHTTP::GetHeader(const wxString& header)
return it->second; return it->second;
} }
void wxHTTP::SetPostBuffer(const wxString& post_buf)
{
m_post_buf = post_buf;
}
void wxHTTP::SendHeaders() void wxHTTP::SendHeaders()
{ {
typedef wxStringToStringHashMap::iterator iterator; typedef wxStringToStringHashMap::iterator iterator;
@@ -137,7 +143,7 @@ bool wxHTTP::ParseHeaders()
return TRUE; return TRUE;
} }
bool wxHTTP::Connect(const wxString& host) bool wxHTTP::Connect(const wxString& host, unsigned short port)
{ {
wxIPV4address *addr; wxIPV4address *addr;
@@ -156,7 +162,8 @@ bool wxHTTP::Connect(const wxString& host)
return FALSE; return FALSE;
} }
if (!addr->Service(wxT("http"))) if ( port ) addr->Service(port);
else if (!addr->Service(wxT("http")))
addr->Service(80); addr->Service(80);
SetHeader(wxT("Host"), host); SetHeader(wxT("Host"), host);
@@ -188,6 +195,9 @@ bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req)
case wxHTTP_GET: case wxHTTP_GET:
request = wxT("GET"); request = wxT("GET");
break; break;
case wxHTTP_POST:
tmp_buf = wxT("POST");
break;
default: default:
return FALSE; return FALSE;
} }
@@ -207,6 +217,11 @@ bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req)
SendHeaders(); SendHeaders();
Write("\r\n", 2); Write("\r\n", 2);
if ( req == wxHTTP_POST ) {
Write(m_post_buf, m_post_buf.Len());
m_post_buf = wxEmptyString;
}
wxString tmp_str; wxString tmp_str;
m_perr = GetLine(this, tmp_str); m_perr = GetLine(this, tmp_str);
if (m_perr != wxPROTO_NOERR) { if (m_perr != wxPROTO_NOERR) {
@@ -309,7 +324,7 @@ wxInputStream *wxHTTP::GetInputStream(const wxString& path)
return NULL; return NULL;
#endif #endif
if (!BuildRequest(path, wxHTTP_GET)) if (!BuildRequest(path, m_post_buf.IsEmpty() ? wxHTTP_GET : wxHTTP_POST))
return NULL; return NULL;
inp_stream = new wxHTTPStream(this); inp_stream = new wxHTTPStream(this);