개발/Python

Python 요청. 403 금지

MinorMan 2020. 10. 2. 02:12
반응형

<질문>

사이트를 구문 분석해야하는데 403 Forbidden 오류가 발생했습니다. 다음은 코드입니다.

url = 'http://worldagnetwork.com/'
result = requests.get(url)
print(result.content.decode())

출력 :

403 Forbidden
403 Forbiddennginx

문제가 무엇인지 말 해주세요.


<답변1>

페이지가 User-Agent를 식별하지 않는 GET 요청을 거부하는 것 같습니다. 브라우저 (Chrome)로 페이지를 방문하고 GET 요청의 User-Agent 헤더를 복사했습니다 (개발자 도구의 네트워크 탭에서 확인).

import requests
url = 'http://worldagnetwork.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
result = requests.get(url, headers=headers)
print(result.content.decode())

# <!doctype html>
# 
# 
# 
#  
# ...

<답변2>

Alberto의 답변에 추가하십시오.

user-agent를 추가 한 후에도 403 Forbidden이 계속 표시되는 경우 리퍼러와 같은 헤더를 더 추가해야 할 수 있습니다.

headers = {
    'User-Agent': '...',
    'referer': 'https://...'
}

헤더는 개발자 도구의 네트워크> 헤더> 요청 헤더에서 찾을 수 있습니다. (F12를 눌러 전환합니다.)


<답변3>

귀하가 서버의 소유자 / 관리자이고 수락 된 솔루션이 귀하에게 적합하지 않은 경우 CSRF 보호를 비활성화하십시오 (SO 답변 링크).

저는 Spring (Java)을 사용하고 있으므로 설정하려면 다음을 포함하는 SecurityConfig.java 파일을 만들어야합니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure (HttpSecurity http) throws Exception {
        http.csrf().disable();
    }
    // ...
}

<답변4>

다음을 사용해보십시오.

import requests

requests.get(url, auth=('username','password'))
반응형