我想做cURL GET请求。应使用以下URL:
it("User successfully login",()=>{
var EC = protractor.ExpectedConditions; //or within onPrepare() of conf.js put global.EC = protractor.ExpectedConditions ... to make it everywhere available.
browser.get(browser.baseUrl + '/account/login');
//next line lets protractor wait max 5 seconds for your url to become, what you want.
browser.wait(EC.urlContains(browser.baseUrl + "/account/login"), 5000);
//additionally after the URL appeared, use this command to wait until the page is fully loaded.
browser.waitForAngular();
expect(browser.getCurrentUrl()).toBe(browser.baseUrl + "/account/login");
element(by.tagName('input[type=text]')).sendKeys('username');
element(by.tagName('input[type=password]')).sendKeys('password');
element(by.css('button[type=submit]')).click();
//next line lets protractor wait max 5 seconds for your url to become, what you want.
//as here a new page is loaded and the click()-promise is resolved before, use this:
browser.wait(EC.urlContains(browser.baseUrl + "/account/login"), 5000);
//additionally after the URL appeared, use this command to wait until the page is fully loaded.
browser.waitForAngular();
expect(browser.getCurrentUrl()).toBe(browser.baseUrl + "/home");
});
在URL的末尾,我有一些单词,我想将其设计为变量,因此根据输入,URL是不同的,然后我请求另一个资源。
网址的结尾。 $ ab,$ start,$ end和$ strand是变量,所有这些都是字符串。
https://iant.toulouse.inra.fr/bacteria/annotation/cgi/rhime.cgi' -H 'Host: iant.toulouse.inra.fr' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: de,en-US;q=0.7,en;q=0.3' --compressed -H 'Referer: https://iant.toulouse.inra.fr/bacteria/annotation/cgi/rhime.cgi?__wb_cookie=&__wb_cookie_name=auth.rhime&__wb_cookie_path=/bacteria/annotation/cgi&__wb_session=WB84Qfsf&__wb_main_menu=Genome&__wb_function=$parent' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' --data '__wb_function=PortalExtractSeq&mode=run&species=rhime&fastafile=%2Fwww%2Fbacteria%2Fannotation%2F%2Fsite%2Fprj%2Frhime%2F%2Fdb%2F$ab.genomic&begin=$start&end=$end&strand=$strand
我遇到了“urlencode”,我将URL作为一个大字符串存储在变量中并将其传递给URL编码,但我不确定,该怎么做。
我试过这个/我正在寻找这样的东西:
...2Frhime%2F%2Fdb%2F$ab.genomic&begin=$start&end=$end&strand=$strand
对于我的响应代码检查,直接传递$ location的方法似乎有效,但是有了更多的变量,我得到一个错误(响应代码100,而我得到200代码检查)
在理解curl / urlencode时是否存在一般错误?我错过了什么?
提前感谢您的时间和精力:)
#!bin/bash
[...]
cURL="https://iant.toulouse.inra.fr/bacteria/annotation/cgi/rhime.cgi' -H 'Host: iant.toulouse.inra.fr' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: de,en-US;q=0.7,en;q=0.3' --compressed -H 'Referer: https://iant.toulouse.inra.fr/bacteria/annotation/cgi/rhime.cgi?__wb_cookie=&__wb_cookie_name=auth.rhime&__wb_cookie_path=/bacteria/annotation/cgi&__wb_session=WB84Qfsf&__wb_main_menu=Genome&__wb_function=$parent' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' --data '__wb_function=PortalExtractSeq&mode=run&species=rhime&fastafile=%2Fwww%2Fbacteria%2Fannotation%2F%2Fsite%2Fprj%2Frhime%2F%2Fdb%2F$ab.genomic&begin=$start&end=$end&strand=$strand"
# storing HTTP response code in variable response. Only if the
# reponse code is OK (200), we move on
response=$(curl -X HEAD -I --header 'Accept:txt/html' "https://iant.toulouse.inra.fr/bacteria/annotation/cgi/rhime.cgi?__wb_cookie=&__wb_cookie_name=auth.rhime&__wb_cookie_path=/bacteria/annotation/cgi&__wb_session=WB8jqwTM&__wb_main_menu=Genome&__wb_function="$location""|head -n1|awk '{print $2}')
echo "$response"
# getting information via curl request
if [ $response = 200 ] ; then
info=$(curl -G "$ (urlencode "$cURL")")
fi
echo $info
答案 0 :(得分:1)
您需要分开概念。您放在cURL变量中的字符串不是URL,它是URL +标题+参数集+一个压缩选项。它们都是不同的东西。
单独定义它们:
url='https://iant.toulouse.inra.fr/bacteria/annotation/cgi/rhime.cgi'
headers=(
-H 'Host: iant.toulouse.inra.fr'
-H 'User-Agent: ...'
-H 'Accept: ...'
-H 'Accept-Language: ...'
... other headers from your example ...
)
options=(
--compressed
)
data="__wb_function=PortalExtractSeq&mode=run&species=rhime&fastafile=%2Fwww%2Fbacteria%2Fannotation%2F%2Fsite%2Fprj%2Frhime%2F%2Fdb%2F$ab.genomic&begin=$start&end=$end&strand=$strand"
然后以这种方式运行curl:
curl -G "${options[@]}" "${headers[@]}" --data "${data}" "${url}"
这将扩展为纠正curl命令。
关于urlencode部分:您需要分别编码$ ab,$ start,$ end和$ strand中的每一个。如果您将它们插入字符串然后进行编码,那么该字符串中的所有特殊字符(如&
和=
)也将被编码,而那些已经编码的字符(例如%2F
将在您的示例中编码)被编码两次(将成为%252F
)。
为了保持代码整洁,您可以事先对其进行编码:
ab=$(urlencode "${ab}")
start=$(urlencode "${start}")
end=$(urlencode "${end}")
strand=$(urlencode "${strand}")
data="__wb_function=PortalExtractSeq&mode=run&species=rhime&fastafile=%2Fwww%2Fbacteria%2Fannotation%2F%2Fsite%2Fprj%2Frhime%2F%2Fdb%2F$ab.genomic&begin=$start&end=$end&strand=$strand"
......或者以繁琐的方式做到:
data="__wb_function=PortalExtractSeq&mode=run&species=rhime&fastafile=%2Fwww%2Fbacteria%2Fannotation%2F%2Fsite%2Fprj%2Frhime%2F%2Fdb%2F$(urlencode "${ab}").genomic&begin=$(urlencode "${start}")&end=$(urlencode "${end}")&strand=$(urlencode "${strand}")"
我希望这会有所帮助。