你好,
我目前正在编写一个客户端来访问Microsoft Exchange服务器并从中读取联系人,约会等.
经过几天的搜索,我已经能够通过PHP的Soap客户端和自定义HTTPS流包装器连接到EWS.这个网站在这一点上给了我很大的帮助.
使用XAMPP在我的Windows 7机器上一切正常
现在我将我的项目上传到Debian 6.0 Squeeze开发机器,它与我的Windows机器完全相同,关于web服务器,php设置,mysql设置等等,但它不再适用了
debian机器可以毫无问题地解析和ping交换服务器
我将实际问题解决到了一定程度,其中cURL无法检索EWS的WSDL文件
它始终收到空响应和401(未授权)状态代码
我使用的凭据是正确的,相同的凭据在我的Windows机器上工作
我提取了有问题的代码并尝试独立运行它,它看起来像这样:
echo "Trying to get https://".$cfg[ 'Exchange.Server' ]."/EWS/Services.wsdl<br>";
$curl = curl_init( 'https://'.$cfg[ 'Exchange.Server' ].'/EWS/Services.wsdl' );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
curl_setopt( $curl, CURLOPT_HTTPAUTH, CURLAUTH_NTLM );
curl_setopt( $curl, CURLOPT_USERPWD, $cfg[ 'Exchange.User' ].':'.$cfg[ 'Exchange.Password' ] );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, false );
echo '<pre>';
$response = curl_exec( $curl );
$info = curl_getinfo( $curl );
var_dump( $info );
var_dump( …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用WGET批处理文件从这里下载公共FCC文件
http://wireless.fcc.gov/uls/data/complete/l_micro.zip
当我最初使用参数运行批处理文件时
wget --server-response -owget.log http://wireless.fcc.gov/uls/data/complete/l_micro.zip
Run Code Online (Sandbox Code Playgroud)
它因HTTP 401未授权错误而失败.我可以在这一点上重试并且它一直在失败.但是我注意到,如果我打开IE,开始下载并在提示保存时取消,我可以重新运行批处理文件,它可以完美执行!
这是我日志中的详细服务器响应
--2012-02-06 14:32:24-- http://wireless.fcc.gov/uls/data/complete/l_micro.zip
Resolving wireless.fcc.gov (wireless.fcc.gov)... 192.104.54.158
Connecting to wireless.fcc.gov (wireless.fcc.gov)|192.104.54.158|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 302 Found
Location: REMOVED - appears to have my IP
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Connection: close
Content-Length: 513
Location: REMOVED [following]
--2012-02-06 14:32:24-- REMOVED
Resolving REMOVED... 192.168.2.11
Connecting to REMOVED|192.168.2.11|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 401 Unauthorized
Cache-Control: no-cache
Pragma: no-cache
WWW-Authenticate: NTLM
WWW-Authenticate: BASIC realm="AD_BCAAA"
Content-Type: …Run Code Online (Sandbox Code Playgroud) 我有一个用MVC 4编写的Intranet项目,它使用Windows身份验证来授权和验证用户.
我需要添加"以其他用户身份登录"功能.
经过一些搜索,我发现这个解决方案建议返回401,并创建了以下Action(使用表单调用):
//
// POST: /Home/LogOut
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOut()
{
return new HttpUnauthorizedResult();
}
Run Code Online (Sandbox Code Playgroud)
调用Action,浏览器会弹出用户名和密码窗口,但是当结果重定向回Action时,总会返回401.
一旦用户使用新凭据登录,如何将用户重定向回上一个操作?
有没有办法使服务器端的凭据无效,而不是只返回401?
asp.net-mvc http windows-authentication logout http-status-code-401
我HttpsUrlConnection通过使用Authenticator和设置默认Authenticator对象使用基本身份验证,如下所示:
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "userpass"
.toCharArray());
}
});
Run Code Online (Sandbox Code Playgroud)
当我访问我的Web服务时,连接调用我的getPasswordAuthentication()方法来获取凭据并将其发送到Web服务器.只要密码正确,这就可以正常工作.:)
然而,恰巧有人在Web服务器上更改了基本身份验证密码,然后我的请求没有返回.
我调试了它,发生的事情是我getInputStream()永远不会回来.该HttpsUrlConnection确实得到了401响应,并在内部再次得到相同的凭据反应这一点.但由于我只提供了一个用户和密码,这将再次失败(并再次......).
所以我的问题是:我怎样才能防止这种情况以及哪里有一个钩子来对错误的密码做出反应(分别是401响应)所以我可以显示一条相应的错误信息并取消请求?
以下是重复调用的方法的堆栈跟踪的摘录HttpsUrlConnection:
1: MyOwnHttpConnection$3.getPasswordAuthentication() line: 99
2: Authenticator.requestPasswordAuthentication(InetAddress, int, String, String, String) line: 162
3: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).getAuthorizationCredentials(String) line: 1205
4: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).processAuthHeader(String, String) line: 1178
5: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).processResponseHeaders() line: 1118
6: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).retrieveResponse() line: 1044
7: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).getInputStream() line: 523
8: HttpsURLConnectionImpl.getInputStream() line: 283
Run Code Online (Sandbox Code Playgroud) 我正在使用jQuery.ajax调用通过javascript调用api .如果用户未经过身份验证,api会回复401,我只想忽略此错误.
我已经尝试了jQuery选项中描述的所有回调选项,但错误仍然在浏览器控制台中弹出(在Firefox和Chrome中).
以下是触发错误的示例代码:
$.ajax({
type: 'GET',
url: '/url-with-auth',
dataType: 'json',
statusCode: {
401: function (error) {
// simply ignore this error
console.log(error);
}
},
complete: logall,
error: function () {
// simply ignore this error
console.log(error);
},
async: false
}).fail(function () {
// ignore the error and do nothing else
console.log("$.get failed!");
});
Run Code Online (Sandbox Code Playgroud)
这也具有在由.htaccess文件保护的登台机上再次请求用户凭证的副作用,因为浏览器认为用户未被认证,因此在以下请求中用户需要重新输入他的http凭证.
有没有办法完全忽略这个错误?
目前我有一个完全缓存应用程序端的HTML模板,我想出于性能原因保留此行为.布局中唯一更改的部分是当前用户的登录信息,因此我使用默认标记呈现(缓存)页面,未登录用户,然后使用jQuery我将标记的相关元素替换为ajax调用返回的登录信息.因此,如果用户未登录且ajax端点返回401我不需要任何内容,则标记应保持不变.
一切都在这个时刻工作,唯一的丑陋的事情是我在控制台中有401 javascript错误,我想摆脱它.
这是我正在谈论的消息的屏幕截图:

我正在尝试获取某些网页的html代码,我有一个正确的用户名和密码,但我仍然无法让它工作,这是我的代码:
private void buttondownloadfile_Click(object sender, EventArgs e)
{
NetworkCredentials nc = new NetworkCredentials("?", "?", "http://cdrs.globalpopsvoip.com/0000069/20091229/20091228_20091228.CDR");
WebClient client = new WebClient();
client.Credentials = nc;
String htmlCode = client.DownloadString("http://cdrs.globalpopsvoip.com/0000069/20091229/20091228_20091228.CDR");
MessageBox.Show(htmlCode);
}
Run Code Online (Sandbox Code Playgroud)
MessageBox只是为了测试它,问题是每次我到达这一行:
String htmlCode = client.DownloadString("http://cdrs.globalpopsvoip.com/0000069/20091229/20091228_20091228.CDR");
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:
远程服务器返回错误:(401)未经授权.
我该如何解决?
好的,这是第7天未成功尝试找到答案为什么会出现401错误...
现在,根文件夹中的.htaccess只包含3个字符串(已简化),项目中没有更多.htaccess文件:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
因此,它将所有请求重定向为https.它适用于任何URL,即使对于/ administration目录也是如此.
所以,
http://mydomain.com
Run Code Online (Sandbox Code Playgroud)
变
https://mydomain.com
Run Code Online (Sandbox Code Playgroud)
如果https://mydomain.com输入,则没有重定向.
http://mydomain.com/administration/index.php
Run Code Online (Sandbox Code Playgroud)
变
https://mydomain.com/administration/index.php
Run Code Online (Sandbox Code Playgroud)
如果https://mydomain.com/administration/index.php输入,则没有重定向.
这很清楚,问题如下.
我希望/管理目录受密码保护.我的共享主机控制面板允许保护目录而无需手动创建.htaccess和.htpasswd(您选择要保护的目录,创建用户名和密码,并自动创建.htaccess和.htpasswd).因此,.htaccess出现在/ administration文件夹中..htpasswd出现在其他地方,.htpasswd的路径是正确的,一切看起来都是正确的(它的工作方式与手动创建它的方式相同).因此,项目中有2个.htaccess文件,一个位于根目录中,另一个位于/ administration目录中(目录中的.htpasswd .htaccess知道它在哪里).
创建密码后,结果为:
你输入:
https://mydomain.com/administration/index.php
Run Code Online (Sandbox Code Playgroud)
然后它要求输入密码.如果输入正确,
https://mydomain.com/administration/index.php则会显示.
结果:完美无缺.
但是,如果你输入
http://mydomain.com/administration/index.php(是的,http,没有S)然后重定向到相同但是重定向到https页面而不是重定向到
https://mydomain.com/401.shtml (starts with httpS)
Run Code Online (Sandbox Code Playgroud)
原因不明,甚至不问密码.为什么?
我已就此问题联系了客户支持,他们确定问题出在.htaccess文件中,并且他们没有修复.htaccess文件(很明显,他们没有,我不介意).
为什么会这样?我是否忘记在.htaccess文件中放置一些标志或一些选项来更改默认设置?
PSCreating .htaccess和.htpasswd手动(不是从托管控制面板)文件夹/管理导致相同的401错误,如果不是https,但输入了http.
并且问题仅出现在/ administration目录的URL中.
谢谢.
OkHttp 2.3根据OKHttp文档,我正在使用基本身份验证请求,它会自动重试未经身份验证的请求,但每当我提供无效凭据时,请求都会花费太多时间,最后我得到了这个异常:
java.net.ProtocolException:后续请求太多:21
如何阻止OkHttp自动重试未经身份验证的请求,然后返回401 Unauthorized?
我已经创建了一个启用了Windows身份验证的ASP.NET MVC 3 Intranet站点:
<authentication mode="Windows"/>web.config说,上面所有这三个都禁用了匿名访问<deny users="?"/>.通过标识<impersonate="false"/>和IIS 7.5服务器中的站点属性在web.config中禁用模拟.最后,NETWORK SERVICE设置为运行应用程序池,并且还具有Read on the site文件夹(不确定是否需要它,你告诉我,但它确实不足以解决我的问题).
现在,通过标准Windows身份验证对话框登录时,域用户在三次有效登录尝试后会出现401.3错误.这似乎甚至在达到我的MVC网站的代码之前,即它似乎完全与IIS相关.对于尝试登录的所有用户,事件日志提供以下类型的条目(它是一个信息条目,而不是错误,我对它进行了一些模糊处理以保护我的客户端):
Event code: 4008
Event message: File authorization failed for the request.
Event time: 2012-02-20 18:45:41
Event time (UTC): 2012-02-20 17:45:41
Event ID: 6dd3b4bf99784ba1a0fe06694dd89691
Event sequence: 3
Event occurrence: 1
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/2/ROOT-1-129742335229554599
Trust level: Full
Application Virtual Path: /
Application Path: D:\Public\BlahblahManager\
Machine name: HUB01-XYZ123
Process information:
Process ID: 2920
Process …Run Code Online (Sandbox Code Playgroud) acl windows-authentication iis-7.5 http-status-code-401 asp.net-mvc-3
参考文献:http://developer.android.com/google/gcm/demo.html
尝试向我的Android设备发送消息时的服务器401.
HTTP Status 500 - HTTP Status Code: 401
type Exception report
message HTTP Status Code: 401
description The server encountered an internal error (HTTP Status Code: 401) that prevented it from fulfilling this request.
exception
com.google.android.gcm.server.InvalidRequestException: HTTP Status Code: 401
com.google.android.gcm.server.Sender.sendNoRetry(Sender.java:177)
com.google.android.gcm.server.Sender.send(Sender.java:121)
com.google.android.gcm.demo.server.SendAllMessagesServlet.doPost(SendAllMessagesServ let.java:83)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.29 logs.
Run Code Online (Sandbox Code Playgroud)
谁能告诉我怎么解决?谢谢!