如何修复来自Google脚本的“登录信息不允许”错误?

4

我正在尝试通过 Google 表格使用 Shopify API 创建产品。每当我尝试创建 HTTP 请求时,都会出现以下错误:

"登录信息不允许"

为了测试 API,我创建了一个几乎相同的 Python 脚本。运行 Python 脚本后,产品按计划创建。但是,我就是无法通过我的 Google 表格使其正常工作。

Google Script 代码(不起作用):

function create_product() {

    var url = "https://XXXX:XXXX@XXXX.myshopify.com/admin/api/2019-04/products.json";

    var data = {
             "product": {
                 "title": 'test 1',
                 "body_html": 'test 1',
                 "vendor": 'test 1',
                 "product_type": 'test 1',
                 "tags" : 'test 1'
                  }
              };

    var params = {
             method : 'POST',
             contentType : 'application/json',
             payload : JSON.stringify(data),
             };

    var post = UrlFetchApp.fetch(url, params);
}

Python 代码:

import requests

url = "https://XXXX:XXXX@XXXX.myshopify.com/admin/api/2019-04/products.json"

data = {
        "product": {
             "title": 'test 1',
             "body_html": 'test 1',
             "vendor": 'test 1',
             "product_type": 'test 1',
             "tags" : 'test 1'}
        }

post = requests.post(url=url, json=data)

我原本期望这两个脚本给出相同的结果,但只有Python脚本似乎有效。当我尝试进行HTTP POST时,在Google脚本中会一直出现“登录信息不允许”的错误。


嗨,Magnus,将来请确保在您的问题中使用代码格式 - 没有它真的很难阅读。您可以在此处阅读指南 - taylorthurlow
1
谢谢!这是我的第一篇帖子,我会确保以后都这样做。 - Magnus Juul
2个回答

4
根据这个 Stack Overflow 的回答和 Google bug 追踪器上的这个问题,在URL中添加API凭证不起作用。考虑将它们添加到Authorization头中。一个POST请求的示例代码如下:
var response = UrlFetchApp.fetch(url, {
            "method": "post",
            'contentType': 'application/json',
            'payload': JSON.stringify(payload),
            "headers": {
                "Authorization": "Basic " + Utilities.base64Encode("username_here:password_here")
                }
            });

谢谢!这让我遇到了另一个错误。但我会为此添加一个新的问题。 - Magnus Juul
这个救了我的命!非常感谢你! - Morfinismo

0

我曾经遇到过同样的问题,但是我通过以下方法解决了它:

这是我的Python代码:

    useremail= ""
    userpass =""
    SomeOtherKey_Value =""
    login_url_auth =""
    login_url = ""
    payload  = {

    payload = {"email":useremail,"password":userpass,"SOME OTHER KEY(case sensistive!!!)":SomeOtherKey_Value}

    result = session_requests.post(

        login_url_auth, 
        data = json.dumps(payload ),
        headers = {"referer":login_url, "Content-Type":"application/json"}
    )

这是我的当前GoogleScript代码:

useremail= ""
    userpass =""
    SomeOtherKey_Value =""
    login_url_auth =""
    login_url = ""

    var data = {
    'email': useremail,
    'password': userpass,
    'SOME OTHER KEY(case sensistive!!!)':SomeOtherKey_Value
    };

    var options = {
        'method' : 'post',
        'contentType': 'application/json',  // other post it was Content_Type!! no it's contentType for my case at least, even though Chrome developer mode shows it as Content_Type.

        'referer': login_url,
        // Convert the JavaScript object to a JSON string.
        // other post it was body!! no it's payload for my case at least, even though Chrome developer mode shows it as body 
        'payload' : JSON.stringify(data)
    };

    var result = UrlFetchApp.fetch(login_url_auth , options);

一旦我能够修复请求调用,这是我如何检查结果的方法。

 var result = UrlFetchApp.fetch(login_url_auth , options);

    for(i in result) {
        Logger.log(i + ": " + result[i]);
        //Logger.log("Data " + ": " + result[i].getContent());
    }
    Logger.log("Data " + result.getContentText())

其他来源:https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接