teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

誤って投稿したため削除しました。

2016/02/09 21:06

投稿

Koke1024
Koke1024

スコア31

answer CHANGED
@@ -1,1 +1,1 @@
1
- 自己解決の投稿欄を間違ったため削除しました。
1
+ 誤って投稿たため削除しました。

1

自己解決の投稿欄を間違ったため削除しました。

2016/02/09 21:06

投稿

Koke1024
Koke1024

スコア31

answer CHANGED
@@ -1,72 +1,1 @@
1
- 自己解決できました。
2
- HTTPについての知識が断片的であり、リクエストの構造を把握していなかったことが原因でした。
3
- 以下のサイトでHTTPリクエストについて調べたところ、ヘッダ行とボディ部を混同していたことがわかりました。
4
- [http://www.yoheim.net/blog.php?q=20120611](http://www.yoheim.net/blog.php?q=20120611)
5
-
6
- そして、以下のサイトを参考に、それぞれのパラメータをバウンダリ文字列で区切った文字列をボディ部にsetRequestDataでセットしたところ、意図通りのデータを取得することが出来ました。
7
- [http://d.hatena.ne.jp/satox/20110726/1311665904](http://d.hatena.ne.jp/satox/20110726/1311665904)
8
-
9
- 該当処理コードは以下のようになりました。
1
+ 自己解決投稿欄を間違ったため削除しました。
10
- ※部分的なものなので正常に動作するかは保証出来ません。
11
-
12
- ```C++
13
- void cGameManager::Upload(string path) {
14
- HttpRequest* request = new HttpRequest();
15
- string url = "http://***.jp/";
16
- request->setUrl(url.c_str());
17
- request->setRequestType(HttpRequest::Type::POST);
18
-
19
- string boundary = GetRandomBoundary();
20
- //ヘッダ
21
- vector<string> headers;
22
- headers.push_back("Content-Type: multipart/form-data; boundary=" + boundary);
23
- request->setHeaders(headers);
24
-
25
- //ボディー
26
- map<string, string> postData = map<string, string>();
27
- postData["ownerId"] = "1";
28
- postData["action"] = "upload";
29
- string postString = GetPostString(postData, boundary);
30
- postString += GetMultipartData(path, boundary);
31
- request->setRequestData(postString.c_str(), postString.length());
32
-
33
- I(HttpClient)->send(request);
34
- request->release();
35
- }
36
-
37
- string GetPostString(map<string, string>& postMap, string boundary) {
38
- if (postMap.size() == 0) {
39
- return "";
40
- }
41
- string postString = "";
42
- postString += "\r\n--" + boundary;
43
- for (auto iter = postMap.begin(); iter != postMap.end(); ++iter) {
44
- postString += "\r\nContent-Disposition: form-data; name=\"" + iter->first + "\"";
45
- postString += "\r\n\r\n" + iter->second;
46
- if ((++iter)-- != postMap.end()) {
47
- postString += "\r\n--" + boundary;
48
- }
49
- }
50
- postString += "\r\n--" + boundary;
51
- return postString;
52
- }
53
-
54
- string GetMultipartData(string path, string boundary) {
55
- auto fileData = I(FileUtils)->getDataFromFile(path);
56
- string binary;
57
- GetFileBinary(path, binary);
58
- char length[1024];
59
-
60
- string body = "";
61
- body += "\r\n--" + boundary;
62
-
63
- body += "\r\n" + string(length);
64
- body += "\r\nContent-disposition: form-data; name=\"uploadFile\"; filename=\"file.zip\"";
65
- body += "\r\nContent-Type: application/zip";
66
- body += "\r\n\r\n" + binary;
67
-
68
- body += "\r\n--" + boundary;
69
-
70
- return body;
71
- }
72
- ```