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

回答編集履歴

4

2021/11/22 13:05

投稿

退会済みユーザー
answer CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  どのような内容のrequestを行ったかを知りたいとき、https://httpbin.org/ というサイトを利用することができます。
12
12
 
13
- 今回のように、post内容を調べたい場合は、https://httpbin.org/post というエンドポイントに対してpostすると、自分がpostした内容がそのままレスポンスとして返ってきます。
13
+ 今回のように、post内容を調べたい場合は、https://httpbin.org/post というエンドポイントに対してpostすると、自分がpostした内容がそのままレスポンスとして返ってきます。
14
14
 
15
15
  質問文のpost内容を調べてみました。
16
16
  調べるためのソースコードは以下です。(単純に、apiエンドポイントを "https://httpbin.org/post"に変えて、responseをダンプしているだけです)

3

追記

2021/11/22 13:05

投稿

退会済みユーザー
answer CHANGED
@@ -2,4 +2,170 @@
2
2
 
3
3
  サーバーは、そのUserAgentを判別してアクセスを弾いている可能性があります。
4
4
 
5
- なお、このUserAgentは変更できません。(ヘッダに任意のUser-Agentを付け加えても元のUser-Agentに上書きされます)
5
+ なお、このUserAgentは変更できません。(ヘッダに任意のUser-Agentを付け加えても元のUser-Agentに上書きされます)
6
+
7
+ ---
8
+
9
+ # 追記
10
+
11
+ どのような内容のrequestを行ったかを知りたいとき、https://httpbin.org/ というサイトを利用することができます。
12
+
13
+ 今回のようbに、post内容を調べたい場合は、https://httpbin.org/post というエンドポイントに対してpostすると、自分がpostした内容がそのままレスポンスとして返ってきます。
14
+
15
+ 質問文のpost内容を調べてみました。
16
+ 調べるためのソースコードは以下です。(単純に、apiエンドポイントを "https://httpbin.org/post"に変えて、responseをダンプしているだけです)
17
+
18
+ python
19
+ ```python
20
+ import requests
21
+
22
+ url = "https://httpbin.org/post"
23
+
24
+ payload={}
25
+ headers = {
26
+ 'X-Authorization': 'abcdefghijklmn'
27
+ }
28
+
29
+ response = requests.request("POST", url, headers=headers, data=payload)
30
+
31
+
32
+ print(response.text)
33
+ ```
34
+
35
+ GAS
36
+ ```js
37
+ function sending(yesorno, requestId) {
38
+ var requestId = "*******************"
39
+  var STAGING_KEY = "abcdefghijklmn"
40
+
41
+ // var url = url = "http://myapi/internal/ocr/"+requestId+"/ng"
42
+ var url = "https://httpbin.org/post"
43
+ var data = {}
44
+ var options = {
45
+ 'muteHttpExceptions': true,
46
+ 'method': 'post',
47
+ 'payload': JSON.stringify(data),
48
+ 'headers': {
49
+ 'X-Authorization': STAGING_KEY
50
+ }
51
+ };
52
+
53
+ //Error processing
54
+ try {
55
+ var response = JSON.parse(UrlFetchApp.fetch(url, options));
56
+ Logger.log(JSON.stringify(response,undefined,1))
57
+ if (response && response["id"]) {
58
+ return 'sent';
59
+ } else {
60
+ //reportError("Invalid response: " + JSON.stringify(response));
61
+ //return 'error';
62
+ Logger.log('error')
63
+ }
64
+ } catch (e) {
65
+ //reportError(e.toString());
66
+ //return 'error';
67
+ Logger.log('error')
68
+ }
69
+ }
70
+ ```
71
+
72
+ <結果比較>
73
+ **pythonのレスポンス**
74
+ ```
75
+ {
76
+ "args": {},
77
+ "data": "",
78
+ "files": {},
79
+ "form": {},
80
+ "headers": {
81
+ "Accept": "*/*",
82
+ "Accept-Encoding": "gzip, deflate",
83
+ "Content-Length": "0",
84
+ "Host": "httpbin.org",
85
+ "User-Agent": "python-requests/2.12.4",
86
+ "X-Amzn-Trace-Id": "Root=*-******-***************",
87
+ "X-Authorization": "abcdefghijklmn"
88
+ },
89
+ "json": null,
90
+ "origin": "***.***.***.***",
91
+ "url": "https://httpbin.org/post"
92
+ }
93
+ ```
94
+
95
+ **GASのレスポンス**
96
+ ```diff
97
+ {
98
+ "args": {},
99
+ "data": "",
100
+ "files": {},
101
+ +"form": {
102
+ + "{}": ""
103
+ +},
104
+ "headers": {
105
+ "Accept-Encoding": "gzip, deflate, br",
106
+ + "Content-Length": "2",
107
+ "Content-Type": "application/x-www-form-urlencoded",
108
+ "Host": "httpbin.org",
109
+ "User-Agent": "Mozilla/5.0 (compatible; Google-Apps-Script; beanserver; +https://script.google.com; id: *****-********************)",
110
+ "X-Amzn-Trace-Id": "Root=*-******-***************",
111
+ "X-Authorization": "abcdefghijklmn"
112
+ },
113
+ "json": null,
114
+ +"origin": "****:****:****:****:****:****:****:****, ***.***.***.***",
115
+ "url": "https://httpbin.org/post"
116
+ }
117
+ ```
118
+
119
+ ---
120
+
121
+ 比較した結果、色付き(先頭行が+の行)が主な相違点です。
122
+ まとめると
123
+ 1. form(pythonは {}だが、GASは {"{}":""}
124
+ 2. Content-Length (python は0、GASは2)
125
+ 3. origin (pythonはIPv4、GASはIPv6)
126
+ 4. User-Agent(前述)
127
+ となっています。
128
+
129
+ おそらく、2は1に依存しています。
130
+ もし違いが出るとするならば、formのところと推測されます。
131
+
132
+ formに関して、GASの方をpythonと同じ形にするには、下記のように、payloadを削除すればよいことがわかりました。
133
+
134
+ GAS改
135
+ ```js
136
+ function sending(yesorno, requestId) {
137
+ var requestId = "*******************"
138
+  var STAGING_KEY = "abcdefghijklmn"
139
+
140
+ // var url = url = "http://myapi/internal/ocr/"+requestId+"/ng"
141
+ var url = "https://httpbin.org/post"
142
+ var data = {}
143
+ var options = {
144
+ 'muteHttpExceptions': true,
145
+ 'method': 'post',
146
+ // 'payload': JSON.stringify(data), //削除
147
+ 'headers': {
148
+ 'X-Authorization': STAGING_KEY
149
+ }
150
+ };
151
+
152
+ //Error processing
153
+ try {
154
+ var response = JSON.parse(UrlFetchApp.fetch(url, options));
155
+ Logger.log(JSON.stringify(response,undefined,1))
156
+ if (response && response["id"]) {
157
+ return 'sent';
158
+ } else {
159
+ //reportError("Invalid response: " + JSON.stringify(response));
160
+ //return 'error';
161
+ Logger.log('error')
162
+ }
163
+ } catch (e) {
164
+ //reportError(e.toString());
165
+ //return 'error';
166
+ Logger.log('error')
167
+ }
168
+ }
169
+ ```
170
+
171
+ 上記のように「payloadなし」で試してみてはいかがでしょうか。

2

2021/11/22 13:03

投稿

退会済みユーザー
answer CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  サーバーは、そのUserAgentを判別してアクセスを弾いている可能性があります。
4
4
 
5
- なお、このUserAgentは変更できません。(ヘッダにUser-Agentを付け加えても上書きされません
5
+ なお、このUserAgentは変更できません。(ヘッダに任意のUser-Agentを付け加えても元のUser-Agentに上書きされま

1

2021/11/20 04:44

投稿

退会済みユーザー
answer CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  サーバーは、そのUserAgentを判別してアクセスを弾いている可能性があります。
4
4
 
5
- なお、GASこのUserAgentは変更できません。
5
+ なお、このUserAgentは変更できません。(ヘッダにUser-Agentを付け加えても上書きされません)