不,您不能使用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);
});