Skip to content

Instantly share code, notes, and snippets.

@hondasports
Last active April 23, 2020 02:01
Show Gist options
  • Save hondasports/1aaf26296171a9ad68d58c8567441571 to your computer and use it in GitHub Desktop.
Save hondasports/1aaf26296171a9ad68d58c8567441571 to your computer and use it in GitHub Desktop.
How communicate webservice under the MFC.
#include <afxinet.h>
void HTTPSample::ReadResponse()
{
CString url = _T("http://localhost:8080/getSampleResponse/somebinary.bin");
CString server, object;
INTERNET_PORT port;
DWORD serviceType;
::AfxParseURL(url, serviceType, server, object, port);
CInternetSession session;
CHttpConnection* pConnection = session.GetHttpConnection(server, port);
CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET, object);
DWORD statusCode = 0;
pFile->SendRequest();
pFile->QueryInfoStatusCode(statusCode);
if(statusCode == HTTP_STATUS_BAD_REQUEST || statusCode == HTTP_STATUS_SERVER_ERROR)
{
delete pFile;
delete pConnection;
ASSERT(FALSE);
}
CHAR buffer[512];
SecureZeroMemory(buffer, sizeof(buffer));
CStdioFile writeFile;
writeFile.Open(_T(".\\hoge.bin"), CFile::modeCreate | CFile::modeWrite |CFile::typeBinary);
INT readSize = 0;
// Save response to the file.
do
{
readSize = pFile->Read(buffer, sizeof(buffer));
writeFile.Write(buffer, readSize);
SecureZeroMemory(buffer, sizeof(buffer));
} while (readSize > 0);
writeFile.Close();
delete pFile;
delete pConnection;
}
#include <afxinet.h>
void HTTPSample::SendRequest()
{
CString url = _T("http://localhost:8080/postSample");
CString server, object;
INTERNET_PORT port;
DWORD serviceType;
::AfxParseURL(url, serviceType, server, object, port);
CString header = _T("Content-Type: application/octet-stream");
CInternetSession session;
CHttpConnection* pConnection = session.GetHttpConnection(server, port);
CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, object);
pFile->AddRequestHeaders(header);
// It is necessary to load the data to the following variable.
char* buffer = new char[1024];
pFile->SendRequestEx((DWORD)sizeof(buffer));
pFile->Write((LPCTSTR)buffer, (UINT)sizeof(buffer));
pFile->EndRequest();
}
# -*- coding:utf-8 -*-
from bottle import route, run, request, HTTPResponse
import os
@route('/hello')
def hello():
return "Hello World!"
@route('/postSample', method='POST')
def postSample():
f = open('hogehoge', 'w+b')
for packet in request.body:
f.write(packet)
f.close()
@route('/getSampleResponse/<name>', method='GET')
def getSampleResponse(name):
with open('./' + name, 'rb') as fh:
content = fh.read()
res = HTTPResponse(status=200, body=content)
res.content_type = 'application/octet-stream'
res.set_header('Content-Length', str(len(content)))
res.set_header('Cache-Control', 'no-cache')
return res
run(host='localhost', port=8080, debug=True, reloader=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment