在PythonAnywhere服务器调用StanfordCoreNLP服务出现<Response [401]>问题求助
解决PythonAnywhere调用StanfordCoreNLP服务返回401错误的方案
嘿,我之前处理过类似的授权问题,给你几个实用的排查和解决方向:
1. 确认目标服务的认证要求
return (<Response [401]>本质是**未授权访问**,首先要确认`http://corenlp.run:80`这个公共服务是否已经启用了认证机制: - 很多公共NLP服务会从开放访问转为需要API密钥或用户名密码,你可以检查服务的官方说明(如果能访问的话),看是否需要在请求中携带认证信息。 ## 2. 在请求中添加认证信息 如果服务要求认证,根据不同的认证方式调整你的请求代码: ### Basic Auth 示例(requests库) 如果服务使用用户名密码验证,在请求中加入`auth`参数: ```python import requests url = "http://corenlp.run:80" payload = {"text": "Your input text here", "annotators": "tokenize,pos"} response = requests.post(url, json=payload, auth=('your_username', 'your_password')) print(response.status_code) ``` ### API Key 示例 如果服务使用API密钥,通常要在请求头中添加`Authorization`字段: ```python import requests url = "http://corenlp.run:80" headers = {"Authorization": "Bearer YOUR_API_KEY"} payload = {"text": "Your input text here", "annotators": "tokenize,pos"} response = requests.post(url, json=payload, headers=headers) print(response.status_code) ``` ## 3. 排查PythonAnywhere的网络限制 虽然你用的是标准80端口,但还是要确认PythonAnywhere是否允许访问这个域名: - 登录PythonAnywhere的控制台,执行`curl http://corenlp.run:80`测试基础连通性,看是否能得到正常响应(而非401以外的错误)。 - 免费版PythonAnywhere会限制部分外部网络访问,如果curl也失败,可能是该域名被屏蔽,这时候只能考虑替代方案。 ## 4. 替代方案:本地部署StanfordCoreNLP 如果外部服务无法访问或认证成本太高,建议在PythonAnywhere上直接部署StanfordCoreNLP本地实例: 1. 下载StanfordCoreNLP的压缩包和对应语言模型,上传到PythonAnywhere的文件系统。 2. 使用`stanfordcorenlp`库本地调用: ```python from stanfordcorenlp import StanfordCoreNLP # 替换为你上传的CoreNLP路径 nlp = StanfordCoreNLP('/home/your_username/stanford-corenlp-4.5.4', lang='en') text = "Hello, this is a test sentence." annotations = nlp.annotate(text, properties={ 'annotators': 'tokenize,ssplit,pos,lemma', 'outputFormat': 'json' }) print(annotations) nlp.close() ``` 这种方式不需要外部请求,也不会遇到授权问题,适合稳定使用。 内容的提问来源于stack exchange,提问作者mohamednagy)
相关产品推荐
相关产品推荐

