繁体   English   中英

我如何 http 请求发布/获取链接?

[英]How do i http request post/get to a link?

我不知道如何向链接发出 http 请求。 我正在尝试使用下面的链接发布到谷歌应用程序脚本。 我希望该链接对您有所帮助,因为我无法真正解释我要做什么。 我只想能够通过下面的链接运行谷歌脚本。 (我之前在 Node.JS 应用程序上使用过它。)所以我希望能够通过 Javascript 执行下面的链接。 (适用于我的应用程序的 JavaFX。)

String ScriptUrl = "https://script.google.com/macros/s/" + ScriptID + "/exec?sheet=TestSheet&key=" + EnteredPlayerName + "&value=" + SelectedItemName;

(谷歌脚本的作用是:它获取密钥(在链接中)并在电子表格中创建一个新行。在这一行中,我创建了一个包含值的列(在链接中)。

谷歌脚本:


function doGet(e) {
    try {
        var key = e.parameter["key"]
        var sheetName = e.parameter["sheet"]
        var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
        var sheet = doc.getSheetByName(e.parameter["sheet"]);
        var data = sheet.getDataRange().getValues();
        var value
        for (var i = 1; i < data.length; i++) {
            if (data[i][0] == key) {
                value = data[i][1];
            }
        }
        if (value) {
            return ContentService
                .createTextOutput(JSON.stringify({
                    "result": "success",
                    "value": value
                }))
                .setMimeType(ContentService.MimeType.JSON);
        } else {
            return ContentService
                .createTextOutput(JSON.stringify({
                    "result": "error",
                    "error": "Key not found"
                }))
                .setMimeType(ContentService.MimeType.JSON);
        }
    } catch (e) {
        return ContentService
            .createTextOutput(JSON.stringify({
                "result": "error",
                "error": "Database does not exist"
            }))
            .setMimeType(ContentService.MimeType.JSON);
    }
}

function doPost(e) {
    var sheetNom = e.parameter["sheet"];
    var lock = LockService.getPublicLock();
    lock.waitLock(30000);
    try {
        var key = e.parameter["key"]
        var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
        var sheet = doc.getSheetByName(e.parameter["sheet"]);
        var data = sheet.getDataRange().getValues();
        var headRow = e.parameter.header_row || 1;
        var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
        var nextRow = sheet.getLastRow() + 1;
        var row = [];
        for (var i = 1; i < data.length; i++) {
            if (data[i][0] == e.parameter["key"]) {
                nextRow = i + 1;
            }
        }
        for (i in headers) {
            row.push(e.parameter[headers[i]]);
        }
        sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
        return ContentService
            .createTextOutput(JSON.stringify({
                "result": "success",
                "row": nextRow
            }))
            .setMimeType(ContentService.MimeType.JSON);
    } catch (e) {
        return ContentService
            .createTextOutput(JSON.stringify({
                "result": "error",
                "error": e,
                "test": "Test",
                "sheet": sheetNom
            }))
            .setMimeType(ContentService.MimeType.JSON);
    } finally {
        lock.releaseLock();
    }
}

function setup() {
    var doc = SpreadsheetApp.getActiveSpreadsheet();
    SCRIPT_PROP.setProperty("key", doc.getId());
}```

浏览器提供XMLHttpRequest object 可用于从 Z686155AF75A60A0F6EZD83E 发出 HTTP 请求

function httpGet(ScriptUrl)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", ScriptUrl, false ); // false for synchronous request
    xmlHttp.send( null );
    return xmlHttp.responseText;
}

提示:不鼓励同步请求,并且会产生类似的警告。 理想情况下,您不应该使用同步请求。

您应该发出异步请求并在事件处理程序中处理响应。

function httpGetAsync(ScriptUrl, callback)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
            callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", ScriptUrl, true); // true for asynchronous 
    xmlHttp.send(null);
}

我找到了一种方法:对于感兴趣的人,我在这里是如何做到的,代码如下:

String ScriptUrl = "https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/exec?sheet=TestSheet&";
                String post_data = "key=" + EnteredPlayerName  + "&value=" + SelectedItemName;
                
                try {
                    
                    URL url = new URL(ScriptUrl);
                    HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                    httpURLConnection.setRequestMethod("GET");
                    httpURLConnection.setDoOutput(true);
                    
                    OutputStream outputStream = httpURLConnection.getOutputStream();
                    outputStream.write(post_data.getBytes());
                    outputStream.flush();
                    outputStream.close();
                    
                    String line= "";
                    InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream());
                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                    StringBuilder response = new StringBuilder();
                    
                    while ((line=bufferedReader.readLine())!=null){
                        response.append(line);
                    }
                    
                    bufferedReader.close();
                    System.out.println("Response: " + response.toString());
                    
                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("Error in sending request.");
                }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM