2015-10-17 98 views

回答

0

不,您不能使用base64encode(),因爲它不以任何方式支持標頭。底層__utils__.sendAJAX()僅支持「Content-Type」請求標頭。你可以實現你自己的。下面是從clientutils module複製所必需的功能和調整他們在正確的方向邁出的一步:

casper.base64encodeWithHeaders = function(url, method, data, headers) { 
    return this.evaluate(function(url, method, data, headers){ 
     function getBinaryWithHeaders(url, method, data, headers) { 
      try { 
       return sendAjaxWithHeaders(url, method, data, false, { 
        overrideMimeType: "text/plain; charset=x-user-defined", 
        headers: headers 
       }); 
      } catch (e) { 
       if (e.name === "NETWORK_ERR" && e.code === 101) { 
        __utils__.log("getBinary(): Unfortunately, casperjs cannot make cross domain ajax requests", "warning"); 
       } 
       __utils__.log("getBinary(): Error while fetching " + url + ": " + e, "error"); 
       return ""; 
      } 
     }; 
     function sendAjaxWithHeaders(url, method, data, async, settings) { 
      var xhr = new XMLHttpRequest(), 
       dataString = "", 
       dataList = []; 
      method = method && method.toUpperCase() || "GET"; 
      var contentType = settings && settings.contentType || "application/x-www-form-urlencoded"; 
      xhr.open(method, url, !!async); 
      __utils__.log("sendAJAX(): Using HTTP method: '" + method + "'", "debug"); 
      if (settings && settings.overrideMimeType) { 
       xhr.overrideMimeType(settings.overrideMimeType); 
      } 
      if (method === "POST") { 
       if (typeof data === "object") { 
        for (var k in data) { 
         dataList.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k].toString())); 
        } 
        dataString = dataList.join('&'); 
        __utils__.log("sendAJAX(): Using request data: '" + dataString + "'", "debug"); 
       } else if (typeof data === "string") { 
        dataString = data; 
       } 
       xhr.setRequestHeader("Content-Type", contentType); 
      } 
      if (settings && settings.headers) { 
       for(var header in settings.headers) { 
        if (settings.headers.hasOwnProperty(header)) { 
         xhr.setRequestHeader(header, settings.headers[header]); 
        } 
       } 
      } 
      xhr.send(method === "POST" ? dataString : null); 
      return xhr.responseText; 
     } 

     return __utils__.encode(getBinaryWithHeaders(url, method, data, headers)) 
    }, url, method, data, headers); 
} 

您可以使用它像這樣:

casper.then(function(){ 
    var response = this.base64encodeWithHeaders("http://example.com", "GET", null, { 
     "Accept": "text/plain", 
     "Authentication": "let me in!" 
    }); 
    this.echo(response); 
}); 
相關問題