WinSOCKを使ってPOST送信
Posted: 2011年1月10日(月) 09:38
コマンドからIDを受け取り、それをWinMAIN側に送信するように改良したいのですが、エラーがでて、よくわかりません。
どこがおかしいのでしょうか?
元のソースはここのを使っています。
http://eternalwindows.jp/network/winhttp/winhttp02.html
#include <windows.h>
#include <winhttp.h>
#pragma comment (lib, "winhttp.lib")
int main(){
char id[10];
printf("IDを入力してくれ\n");
scanf("%s",id);
_test(id);
}
//int _test(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
int _test(TCHAR id)
{
HINTERNET hSession, hConnect, hRequest;
URL_COMPONENTS urlComponents;
WCHAR szHostName[256], szUrlPath[2048];
WCHAR szUrl[] = L"http://eternalwindows.jp/network/winhttp/sample.php";
WCHAR szHeader[] = L"Content-Type: application/x-www-form-urlencoded\r\n";
CHAR szData[256];
// = "msg=abc";
_stprintf(szData,_T("msg=%s",TCHAR id);
DWORD dwHeaderLength = lstrlenW(szHeader);
DWORD dwDataLength = lstrlenA(szData);
DWORD dwTotalLength;
DWORD dwSize;
DWORD dwStatusCode;
BYTE buffer[4096];
hSession = WinHttpOpen(L"Application/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
if (hSession == NULL)
return 0;
ZeroMemory(&urlComponents, sizeof(URL_COMPONENTS));
urlComponents.dwStructSize = sizeof(URL_COMPONENTS);
urlComponents.lpszHostName = szHostName;
urlComponents.dwHostNameLength = sizeof(szHostName) / sizeof(WCHAR);
urlComponents.lpszUrlPath = szUrlPath;
urlComponents.dwUrlPathLength = sizeof(szUrlPath) / sizeof(WCHAR);
if (!WinHttpCrackUrl(szUrl, lstrlenW(szUrl), 0, &urlComponents)) {
WinHttpCloseHandle(hSession);
return 0;
}
hConnect = WinHttpConnect(hSession, szHostName, INTERNET_DEFAULT_PORT, 0);
if (hConnect == NULL) {
WinHttpCloseHandle(hSession);
return 0;
}
hRequest = WinHttpOpenRequest(hConnect, L"POST", szUrlPath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
if (hRequest == NULL) {
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return 0;
}
dwTotalLength = dwDataLength;
WinHttpSendRequest(hRequest, szHeader, dwHeaderLength, WINHTTP_NO_REQUEST_DATA, 0, dwTotalLength, 0);
WinHttpWriteData(hRequest, szData, dwDataLength, &dwSize);
WinHttpReceiveResponse(hRequest, NULL);
dwSize = sizeof(DWORD);
WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, WINHTTP_HEADER_NAME_BY_INDEX, &dwStatusCode, &dwSize, WINHTTP_NO_HEADER_INDEX);
if (dwStatusCode == HTTP_STATUS_OK) {
WinHttpReadData(hRequest, buffer, sizeof(buffer), NULL);
MessageBoxA(NULL, (LPSTR)buffer, "ボディ", MB_OK);
}
else {
TCHAR szBuf[256];
wsprintf(szBuf, TEXT("Status Code %d"), dwStatusCode);
MessageBox(NULL, szBuf, NULL, MB_ICONWARNING);
}
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return 0;
}
http.c(33) : error C2059: 構文エラー : '型'
http.c(34) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(34) : error C2146: 構文エラー : ';' が、識別子 'dwHeaderLength' の前に必
要です。
http.c(34) : error C2065: 'dwHeaderLength' : 定義されていない識別子です。
http.c(35) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(35) : error C2146: 構文エラー : ';' が、識別子 'dwDataLength' の前に必要
です。
http.c(35) : error C2065: 'dwDataLength' : 定義されていない識別子です。
http.c(36) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
どこがおかしいのでしょうか?
元のソースはここのを使っています。
http://eternalwindows.jp/network/winhttp/winhttp02.html
#include <windows.h>
#include <winhttp.h>
#pragma comment (lib, "winhttp.lib")
int main(){
char id[10];
printf("IDを入力してくれ\n");
scanf("%s",id);
_test(id);
}
//int _test(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
int _test(TCHAR id)
{
HINTERNET hSession, hConnect, hRequest;
URL_COMPONENTS urlComponents;
WCHAR szHostName[256], szUrlPath[2048];
WCHAR szUrl[] = L"http://eternalwindows.jp/network/winhttp/sample.php";
WCHAR szHeader[] = L"Content-Type: application/x-www-form-urlencoded\r\n";
CHAR szData[256];
// = "msg=abc";
_stprintf(szData,_T("msg=%s",TCHAR id);
DWORD dwHeaderLength = lstrlenW(szHeader);
DWORD dwDataLength = lstrlenA(szData);
DWORD dwTotalLength;
DWORD dwSize;
DWORD dwStatusCode;
BYTE buffer[4096];
hSession = WinHttpOpen(L"Application/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
if (hSession == NULL)
return 0;
ZeroMemory(&urlComponents, sizeof(URL_COMPONENTS));
urlComponents.dwStructSize = sizeof(URL_COMPONENTS);
urlComponents.lpszHostName = szHostName;
urlComponents.dwHostNameLength = sizeof(szHostName) / sizeof(WCHAR);
urlComponents.lpszUrlPath = szUrlPath;
urlComponents.dwUrlPathLength = sizeof(szUrlPath) / sizeof(WCHAR);
if (!WinHttpCrackUrl(szUrl, lstrlenW(szUrl), 0, &urlComponents)) {
WinHttpCloseHandle(hSession);
return 0;
}
hConnect = WinHttpConnect(hSession, szHostName, INTERNET_DEFAULT_PORT, 0);
if (hConnect == NULL) {
WinHttpCloseHandle(hSession);
return 0;
}
hRequest = WinHttpOpenRequest(hConnect, L"POST", szUrlPath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
if (hRequest == NULL) {
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return 0;
}
dwTotalLength = dwDataLength;
WinHttpSendRequest(hRequest, szHeader, dwHeaderLength, WINHTTP_NO_REQUEST_DATA, 0, dwTotalLength, 0);
WinHttpWriteData(hRequest, szData, dwDataLength, &dwSize);
WinHttpReceiveResponse(hRequest, NULL);
dwSize = sizeof(DWORD);
WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, WINHTTP_HEADER_NAME_BY_INDEX, &dwStatusCode, &dwSize, WINHTTP_NO_HEADER_INDEX);
if (dwStatusCode == HTTP_STATUS_OK) {
WinHttpReadData(hRequest, buffer, sizeof(buffer), NULL);
MessageBoxA(NULL, (LPSTR)buffer, "ボディ", MB_OK);
}
else {
TCHAR szBuf[256];
wsprintf(szBuf, TEXT("Status Code %d"), dwStatusCode);
MessageBox(NULL, szBuf, NULL, MB_ICONWARNING);
}
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return 0;
}
http.c(33) : error C2059: 構文エラー : '型'
http.c(34) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(34) : error C2146: 構文エラー : ';' が、識別子 'dwHeaderLength' の前に必
要です。
http.c(34) : error C2065: 'dwHeaderLength' : 定義されていない識別子です。
http.c(35) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。
http.c(35) : error C2146: 構文エラー : ';' が、識別子 'dwDataLength' の前に必要
です。
http.c(35) : error C2065: 'dwDataLength' : 定義されていない識別子です。
http.c(36) : error C2275: 'DWORD' : この型は演算子として使用できません
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(152
) : 'DWORD' の宣言を確認してください。