X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f668749377dc53900b58f6a6645891b0ba0adef3..cc4d5638c66a409e421420ed7110917755a66788:/src/common/http.cpp diff --git a/src/common/http.cpp b/src/common/http.cpp index 556618aca5..0ecde88c77 100644 --- a/src/common/http.cpp +++ b/src/common/http.cpp @@ -4,7 +4,6 @@ // Author: Guilhem Lavaux // Modified by: Simo Virokannas (authentication, Dec 2005) // Created: August 1997 -// RCS-ID: $Id$ // Copyright: (c) 1997, 1998 Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -341,37 +340,23 @@ bool wxHTTP::Connect(const wxSockAddress& addr, bool WXUNUSED(wait)) return true; } -bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req) +bool wxHTTP::BuildRequest(const wxString& path, const wxString& method) { - const wxChar *request; - - switch (req) + // Use the data in the post buffer, if any. + if ( !m_postBuffer.IsEmpty() ) { - case wxHTTP_GET: - request = wxT("GET"); - break; - - case wxHTTP_POST: - request = wxT("POST"); - // Content length must be correct, so always set, possibly - // overriding the value set explicitly by a previous call to - // SetHeader("Content-Length"). - if ( !m_postBuffer.IsEmpty() ) - { - wxString len; - len << m_postBuffer.GetDataLen(); - - SetHeader(wxS("Content-Length"), len); - } - - // However if the user had explicitly set the content type, don't - // override it with the content type passed to SetPostText(). - if ( !m_contentType.empty() && GetContentType().empty() ) - SetHeader(wxS("Content-Type"), m_contentType); - break; - - default: - return false; + wxString len; + len << m_postBuffer.GetDataLen(); + + // Content length must be correct, so always set, possibly + // overriding the value set explicitly by a previous call to + // SetHeader("Content-Length"). + SetHeader(wxS("Content-Length"), len); + + // However if the user had explicitly set the content type, don't + // override it with the content type passed to SetPostText(). + if ( !m_contentType.empty() && GetContentType().empty() ) + SetHeader(wxS("Content-Type"), m_contentType); } m_http_response = 0; @@ -396,15 +381,14 @@ bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req) Notify(false); wxString buf; - buf.Printf(wxT("%s %s HTTP/1.0\r\n"), request, path.c_str()); + buf.Printf(wxT("%s %s HTTP/1.0\r\n"), method, path); const wxWX2MBbuf pathbuf = buf.mb_str(); Write(pathbuf, strlen(pathbuf)); SendHeaders(); Write("\r\n", 2); - if ( req == wxHTTP_POST ) { - if ( !m_postBuffer.IsEmpty() ) - Write(m_postBuffer.GetData(), m_postBuffer.GetDataLen()); + if ( !m_postBuffer.IsEmpty() ) { + Write(m_postBuffer.GetData(), m_postBuffer.GetDataLen()); m_postBuffer.Clear(); } @@ -538,7 +522,13 @@ wxInputStream *wxHTTP::GetInputStream(const wxString& path) return NULL; #endif - if (!BuildRequest(path, m_postBuffer.IsEmpty() ? wxHTTP_GET : wxHTTP_POST)) + // Use the user-specified method if any or determine the method to use + // automatically depending on whether we have anything to post or not. + wxString method = m_method; + if (method.empty()) + method = m_postBuffer.IsEmpty() ? wxS("GET"): wxS("POST"); + + if (!BuildRequest(path, method)) return NULL; inp_stream = new wxHTTPStream(this);