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:
@@ -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:
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user