我试图暗示使用JMeter的Web服务的基本身份验证过程。但每次它抛出错误401:未经授权。我尝试使用HTTP标头管理器向其添加标头授权和值。它仍然无效。我也尝试过使用HTTP授权管理器。仍然没有运气。有人可以帮忙。
答案 0 :(得分:48)
我通过调试来自JMeter的请求发现HTTP Authorization Manager模块没有正确编码用户名和密码。它在用户名后面添加换行符。
要对基本身份验证保护的端点运行JMeter测试,请包含HTTP标头管理器并自行添加基本身份验证标头:
从MacOS或Linux:
echo -n "username:password" | base64
来自Windows:
转到here并对您的“用户名:密码”字符串进行编码
在HTTP标头管理器中,添加名称为“授权”的条目和值“基本[上面的编码凭证]”
答案 1 :(得分:31)
编辑JMeter 3.2的2017年8月19日:
基本上要绕过基本授权,您需要添加值基本base64(用户名:密码)的授权标头。问题是JMeter没有嵌入base64功能。
解决方案是:
Step1 添加 BeanShell预处理器(预处理器 - > BeanShell预处理器)
Step2 将以下脚本添加到PreProcessor
import org.apache.commons.codec.binary.Base64;
byte[] encodedUsernamePassword = Base64.encodeBase64("neo4j:1234".getBytes());
vars.put("base64HeaderValue",new String(encodedUsernamePassword));
Step3 添加HTTP标头管理器
Step4 添加具有正确值的授权标头
标题名称授权
标头值基本$ {base64HeaderValue} (base64HeaderValue变量由BeanShell预处理器初始化)
所以最后当你创建一个http请求时,Authorization头会被传递给带有base64编码字符串的服务器
答案 2 :(得分:7)
执行以下操作:
1 /正确配置HTTP Authorization Manager所有必填字段
2 / 选项1:使用HTTP 4:(默认)
从JMeter 3.2开始,无需使用授权管理器进行任何进一步配置
选项2:使用HTTP 3.1:(已弃用)
,取消注释:
httpclient.parameters.file=httpclient.parameters
,取消注释:
http.authentication.preemptive$Boolean=true
答案 3 :(得分:2)
确保为基本URL提供协议,即:“http://localhost”而不是“localhost”
答案 4 :(得分:1)
像Ryan T所说,在HTTP标头管理器中,添加一个名称为"Authorization"
且值为"Basic [encoded credentials from above]"
但不包含[]
的条目。
答案 5 :(得分:0)
添加使用用户名&的@yurko的轻微变体用户定义变量的密码。 (对于3.2之前的Jmeter)
import org.apache.commons.codec.binary.Base64;
String username = vars.get("USERNAME");
String password = vars.get("PASSWORD");
String combineduserpass = username + ":" + password;
byte[] encodedUsernamePassword = Base64.encodeBase64(combineduserpass.getBytes());
vars.put("base64HeaderValue",new String(encodedUsernamePassword));
答案 6 :(得分:0)
In reference to the first answer above, the incorrect encoding problem you mention must be now fixed, as Apache 3.1 does appear to encode the username:password correctly in HTTP Auth Manager
答案 7 :(得分:0)
答案 8 :(得分:0)
答案 9 :(得分:-1)
更新2013年答案中的好结果:
HTTP4选项也适用于当前的Jmeter 2.13版本 添加HTTP Header Manager行后包含:
name="Authorization", value="Basic [base64-encoded user/password string]"
已验证当前主机amazon linux具有从apache 2.4到tomcat8的反向代理; tomcat8识别用户凭据而不是抛出401状态。