标签: http-status-code-401

使用PHP和cURL访问Exchange Web服务

你好,

我目前正在编写一个客户端来访问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)

php curl ntlm exchangewebservices http-status-code-401

12
推荐指数
1
解决办法
2万
查看次数

WGET 401未经授权

我正在尝试使用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)

http wget unauthorized http-status-code-401

12
推荐指数
5
解决办法
7万
查看次数

'以另一个用户身份登录'MVC 4 Windows身份验证

我有一个用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

12
推荐指数
1
解决办法
1万
查看次数

Android:用于基本身份验证的身份验证器的HttpsUrlConnection在密码错误时永远迭代(在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)

android httpurlconnection http-status-code-401

11
推荐指数
1
解决办法
4092
查看次数

摆脱浏览器控制台中的401(未经授权)ajax错误

我正在使用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错误,我想摆脱它.

这是我正在谈论的消息的屏幕截图:

控制台错误

browser jquery http http-status-code-401

11
推荐指数
1
解决办法
7179
查看次数

远程服务器返回错误:(401)未经授权

我正在尝试获取某些网页的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)未经授权.

我该如何解决?

.net c# http-status-code-401

10
推荐指数
3
解决办法
5万
查看次数

使用.htaccess将http重定向到https时,某些网址会出现奇怪的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中.

谢谢.

.htaccess mod-rewrite https http http-status-code-401

10
推荐指数
1
解决办法
8733
查看次数

在Okhttp中处理身份验证

OkHttp 2.3根据OKHttp文档,我正在使用基本身份验证请求,它会自动重试未经身份验证的请求,但每当我提供无效凭据时,请求都会花费太多时间,最后我得到了这个异常:

java.net.ProtocolException:后续请求太多:21

如何阻止OkHttp自动重试未经身份验证的请求,然后返回401 Unauthorized

authentication android http-status-code-401 okhttp okio

10
推荐指数
1
解决办法
6277
查看次数

IIS7.5上的ASP.NET MVC 3 Intranet站点Windows身份验证在尝试登录时为请求提供401.3和文件授权失败

我已经创建了一个启用了Windows身份验证的ASP.NET MVC 3 Intranet站点:

  1. 在Visual Studio项目文件属性中
  2. 在web.config中,即 <authentication mode="Windows"/>
  3. 在IIS 7.5中的站点属性上.服务器

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

9
推荐指数
1
解决办法
5573
查看次数

HTTP状态码:GCMDemo中的401

参考文献: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)

谁能告诉我怎么解决?谢谢!

http-status-code-401 google-cloud-messaging

9
推荐指数
1
解决办法
2万
查看次数