Mein Code spricht mit einer kleinen Java-Anwendung, die von einem Anbieter bereitgestellt wird. Diese Java-App richtet einen Webserver unter localhost: 57000 ein, mit dem der Status von "der Maschine" gesteuert wird. Für diese Frage muss ich den Zustand von "Maschine" von "Aus" auf "Ein" ändern. Um dies zu ermöglichen ich soll HTTP PUT die folgende Zeichenfolge 'die Maschine' bei http://localhost:57000/settings.xml:Warum wird MFC :: CHttpFile 'PUT' für mich nicht?
<settings><machine_state><status>on</status></machine_state></settings>
Diese Locken Befehl funktioniert perfekt:
curl -X PUT -H „Content-Type: application/xml "-d @ settings.xml http://localhost:57000/settings.xml"
wo die lokale Datei 'settings.xml' in den obigen xML-Zeichenfolge hat.
ich möchte zu tun, was Locke ist mit MFC WININET Klassen zu tun. Der folgende Code sollte IMHO genau das gleiche t tun Hing, dass Curl tut. Obwohl der localhost-Webserver einen Code 200 zurückgibt, ignoriert er leider meine XML-Zeichenfolge. Was fehlt mir noch?
int MyHttp::HttpPutThread() NOTHROW
{
try {
m_xml = "<settings><machine_state><status>on</status></machine_state></settings>";
m_url = "settings.xml"
CInternetSession session;
SetSessionOptions(session);
CString server = "localhost:57920";
boost::scoped_ptr<CHttpConnection> phttp(session.GetHttpConnection(server));
LPCTSTR accept = 0;//"text/xml";
boost::scoped_ptr<CHttpFile> phttpfile(phttp->OpenRequest(
"PUT", //verb
"settings.xml", //object name
0, //referer
1, //context
&accept, // accept types
0, //version
INTERNET_FLAG_EXISTING_CONNECT));
CString header = "Content-Type:application/xml\r\n";
if(phttpfile->SendRequest(header,(LPVOID)m_xml.GetBuffer(), m_xml.GetLength()))
{ // LOG_DEBUG (Same as TRACE) output are shown in comment
DWORD code(0);
phttpfile->QueryInfoStatusCode(code);
LOG_DEBUG("HttpPutThread result code: %d", code); // '200'
CString object = phttpfile->GetObject();
LOG_DEBUG("object: %s", object); // 'settings.xml'
CString statustxt;
phttpfile->QueryInfo(HTTP_QUERY_STATUS_TEXT,statustxt);
LOG_DEBUG("status text:%s", statustxt); // 'HTTP/1.0 200 OK'
CString rawheaders;
phttpfile->QueryInfo(HTTP_QUERY_RAW_HEADERS,rawheaders);
LOG_DEBUG("raw headers:%s", rawheaders); // http://localhost:57000/settings.xml
LOG_DEBUG("File url:%s",phttpfile->GetFileURL());
LOG_DEBUG("Verb:%s", phttpfile->GetVerb()); // 'PUT'
} else
{
//This does not happen
LOG_DEBUG("PUT failed in AffHttp::HttpPutThread");
}
} catch(CInternetException* pe)
{
//No exceptions are thrown
LOG_DEBUG("Exception HttpPutThread:%d", pe->m_dwError);
pe->Delete();
}
return 0;
}
Vielen Dank im Voraus.