回答編集履歴

4

2021/11/22 13:05

投稿

退会済みユーザー
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- 今回のように、post内容を調べたい場合は、https://httpbin.org/post というエンドポイントに対してpostすると、自分がpostした内容がそのままレスポンスとして返ってきます。
25
+ 今回のように、post内容を調べたい場合は、https://httpbin.org/post というエンドポイントに対してpostすると、自分がpostした内容がそのままレスポンスとして返ってきます。
26
26
 
27
27
 
28
28
 

3

追記

2021/11/22 13:05

投稿

退会済みユーザー
test CHANGED
@@ -7,3 +7,335 @@
7
7
 
8
8
 
9
9
  なお、このUserAgentは変更できません。(ヘッダに任意のUser-Agentを付け加えても元のUser-Agentに上書きされます)
10
+
11
+
12
+
13
+ ---
14
+
15
+
16
+
17
+ # 追記
18
+
19
+
20
+
21
+ どのような内容のrequestを行ったかを知りたいとき、https://httpbin.org/ というサイトを利用することができます。
22
+
23
+
24
+
25
+ 今回のようbに、post内容を調べたい場合は、https://httpbin.org/post というエンドポイントに対してpostすると、自分がpostした内容がそのままレスポンスとして返ってきます。
26
+
27
+
28
+
29
+ 質問文のpost内容を調べてみました。
30
+
31
+ 調べるためのソースコードは以下です。(単純に、apiエンドポイントを "https://httpbin.org/post"に変えて、responseをダンプしているだけです)
32
+
33
+
34
+
35
+ python
36
+
37
+ ```python
38
+
39
+ import requests
40
+
41
+
42
+
43
+ url = "https://httpbin.org/post"
44
+
45
+
46
+
47
+ payload={}
48
+
49
+ headers = {
50
+
51
+ 'X-Authorization': 'abcdefghijklmn'
52
+
53
+ }
54
+
55
+
56
+
57
+ response = requests.request("POST", url, headers=headers, data=payload)
58
+
59
+
60
+
61
+
62
+
63
+ print(response.text)
64
+
65
+ ```
66
+
67
+
68
+
69
+ GAS
70
+
71
+ ```js
72
+
73
+ function sending(yesorno, requestId) {
74
+
75
+ var requestId = "*******************"
76
+
77
+  var STAGING_KEY = "abcdefghijklmn"
78
+
79
+
80
+
81
+ // var url = url = "http://myapi/internal/ocr/"+requestId+"/ng"
82
+
83
+ var url = "https://httpbin.org/post"
84
+
85
+ var data = {}
86
+
87
+ var options = {
88
+
89
+ 'muteHttpExceptions': true,
90
+
91
+ 'method': 'post',
92
+
93
+ 'payload': JSON.stringify(data),
94
+
95
+ 'headers': {
96
+
97
+ 'X-Authorization': STAGING_KEY
98
+
99
+ }
100
+
101
+ };
102
+
103
+
104
+
105
+ //Error processing
106
+
107
+ try {
108
+
109
+ var response = JSON.parse(UrlFetchApp.fetch(url, options));
110
+
111
+ Logger.log(JSON.stringify(response,undefined,1))
112
+
113
+ if (response && response["id"]) {
114
+
115
+ return 'sent';
116
+
117
+ } else {
118
+
119
+ //reportError("Invalid response: " + JSON.stringify(response));
120
+
121
+ //return 'error';
122
+
123
+ Logger.log('error')
124
+
125
+ }
126
+
127
+ } catch (e) {
128
+
129
+ //reportError(e.toString());
130
+
131
+ //return 'error';
132
+
133
+ Logger.log('error')
134
+
135
+ }
136
+
137
+ }
138
+
139
+ ```
140
+
141
+
142
+
143
+ <結果比較>
144
+
145
+ **pythonのレスポンス**
146
+
147
+ ```
148
+
149
+ {
150
+
151
+ "args": {},
152
+
153
+ "data": "",
154
+
155
+ "files": {},
156
+
157
+ "form": {},
158
+
159
+ "headers": {
160
+
161
+ "Accept": "*/*",
162
+
163
+ "Accept-Encoding": "gzip, deflate",
164
+
165
+ "Content-Length": "0",
166
+
167
+ "Host": "httpbin.org",
168
+
169
+ "User-Agent": "python-requests/2.12.4",
170
+
171
+ "X-Amzn-Trace-Id": "Root=*-******-***************",
172
+
173
+ "X-Authorization": "abcdefghijklmn"
174
+
175
+ },
176
+
177
+ "json": null,
178
+
179
+ "origin": "***.***.***.***",
180
+
181
+ "url": "https://httpbin.org/post"
182
+
183
+ }
184
+
185
+ ```
186
+
187
+
188
+
189
+ **GASのレスポンス**
190
+
191
+ ```diff
192
+
193
+ {
194
+
195
+ "args": {},
196
+
197
+ "data": "",
198
+
199
+ "files": {},
200
+
201
+ +"form": {
202
+
203
+ + "{}": ""
204
+
205
+ +},
206
+
207
+ "headers": {
208
+
209
+ "Accept-Encoding": "gzip, deflate, br",
210
+
211
+ + "Content-Length": "2",
212
+
213
+ "Content-Type": "application/x-www-form-urlencoded",
214
+
215
+ "Host": "httpbin.org",
216
+
217
+ "User-Agent": "Mozilla/5.0 (compatible; Google-Apps-Script; beanserver; +https://script.google.com; id: *****-********************)",
218
+
219
+ "X-Amzn-Trace-Id": "Root=*-******-***************",
220
+
221
+ "X-Authorization": "abcdefghijklmn"
222
+
223
+ },
224
+
225
+ "json": null,
226
+
227
+ +"origin": "****:****:****:****:****:****:****:****, ***.***.***.***",
228
+
229
+ "url": "https://httpbin.org/post"
230
+
231
+ }
232
+
233
+ ```
234
+
235
+
236
+
237
+ ---
238
+
239
+
240
+
241
+ 比較した結果、色付き(先頭行が+の行)が主な相違点です。
242
+
243
+ まとめると
244
+
245
+ 1. form(pythonは {}だが、GASは {"{}":""}
246
+
247
+ 2. Content-Length (python は0、GASは2)
248
+
249
+ 3. origin (pythonはIPv4、GASはIPv6)
250
+
251
+ 4. User-Agent(前述)
252
+
253
+ となっています。
254
+
255
+
256
+
257
+ おそらく、2は1に依存しています。
258
+
259
+ もし違いが出るとするならば、formのところと推測されます。
260
+
261
+
262
+
263
+ formに関して、GASの方をpythonと同じ形にするには、下記のように、payloadを削除すればよいことがわかりました。
264
+
265
+
266
+
267
+ GAS改
268
+
269
+ ```js
270
+
271
+ function sending(yesorno, requestId) {
272
+
273
+ var requestId = "*******************"
274
+
275
+  var STAGING_KEY = "abcdefghijklmn"
276
+
277
+
278
+
279
+ // var url = url = "http://myapi/internal/ocr/"+requestId+"/ng"
280
+
281
+ var url = "https://httpbin.org/post"
282
+
283
+ var data = {}
284
+
285
+ var options = {
286
+
287
+ 'muteHttpExceptions': true,
288
+
289
+ 'method': 'post',
290
+
291
+ // 'payload': JSON.stringify(data), //削除
292
+
293
+ 'headers': {
294
+
295
+ 'X-Authorization': STAGING_KEY
296
+
297
+ }
298
+
299
+ };
300
+
301
+
302
+
303
+ //Error processing
304
+
305
+ try {
306
+
307
+ var response = JSON.parse(UrlFetchApp.fetch(url, options));
308
+
309
+ Logger.log(JSON.stringify(response,undefined,1))
310
+
311
+ if (response && response["id"]) {
312
+
313
+ return 'sent';
314
+
315
+ } else {
316
+
317
+ //reportError("Invalid response: " + JSON.stringify(response));
318
+
319
+ //return 'error';
320
+
321
+ Logger.log('error')
322
+
323
+ }
324
+
325
+ } catch (e) {
326
+
327
+ //reportError(e.toString());
328
+
329
+ //return 'error';
330
+
331
+ Logger.log('error')
332
+
333
+ }
334
+
335
+ }
336
+
337
+ ```
338
+
339
+
340
+
341
+ 上記のように「payloadなし」で試してみてはいかがでしょうか。

2

2021/11/22 13:03

投稿

退会済みユーザー
test CHANGED
@@ -6,4 +6,4 @@
6
6
 
7
7
 
8
8
 
9
- なお、このUserAgentは変更できません。(ヘッダにUser-Agentを付け加えても上書きされません
9
+ なお、このUserAgentは変更できません。(ヘッダに任意のUser-Agentを付け加えても元のUser-Agentに上書きされま

1

2021/11/20 04:44

投稿

退会済みユーザー
test CHANGED
@@ -6,4 +6,4 @@
6
6
 
7
7
 
8
8
 
9
- なお、GASこのUserAgentは変更できません。
9
+ なお、このUserAgentは変更できません。(ヘッダにUser-Agentを付け加えても上書きされません)