谷歌应用程序脚本==> UrlFetchApp,方法GET和cookie

时间:2014-12-14 22:05:52

标签: cookies google-apps-script urlfetch

我使用UrlFetchApp发送用户和pwd(方法POST)。获取cookie后,使用其他请求(方法GET)。但是这个新请求不起作用,我认为这个cookie在这个新请求中没有正确使用。任何人都可以帮助我吗?

  var opt ={
    "method":"post",
    "User-Agent" : "Mozilla/5.0",
    "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language" : "en-US,en;q=0.5",    
    "payload": this.payload.toString(), 
    "followRedirects" : false
  };
  var response = UrlFetchApp.fetch("https://edas.info/addTopic.php?c=19349",opt);
  var resp1=response.getContentText();    
  Logger.log(resp1);  
  response.getResponseCode();

  var headers = response.getAllHeaders();
  var cookies = headers['Set-Cookie']; 
  for (var i = 0; i < cookies.length; i++) {
    cookies[i] = cookies[i].split( ';' )[0];
  };


  opt = {
    "method" : "get",
    "User-Agent" : "Mozilla/5.0",
    "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language" : "en-US,en;q=0.5",    
    "headers": {
      "Cookie": cookies.join(';')
    },
    "followRedirects" : false    
  };
  response = UrlFetchApp.fetch("https://edas.info/addTopic.php?c=19349", opt);
  var resp1=response.getContentText();  
  Logger.log(resp1);  

2 个答案:

答案 0 :(得分:1)

首先,感谢您提供代码片段,这让我开始在这样的脚本中处理cookie。我遇到了一个可能是你问题的问题。有时网页返回一个cookie数组,然后你的代码工作正常。有时它返回一个字符串(而不是一个字符串的数组)。所以我不得不用以下测试消除歧义:

if ( (cookies != null) && (cookies[0].length == 1) ) {
      cookies = new Array(1);              
      cookies[0] = headers['Set-Cookie']; 
}

答案 1 :(得分:0)

我不能为你的问题提供具体的帮助,一个指针虽然在这里找到 Cookie handling in Google Apps Script - How to send cookies in header?

正如https://stackoverflow.com/users/1435550/thierry-chevillard所说:

  

还要注意GAS使用Google IP。可能会发生两次连续提取使用不同的IP。您要连接的服务器可能与会话IP相关。

您的代码是否在本地开发服务器上运行,并且只有在部署到App Engine后才会失败? 还是在本地失败?