728x90
반응형
다음과 같이 JQuery Ajax로 post를 요청할때
$.ajax({
url : "/test.do",
type : "POST",
contentType : "application/json",
data : JSON.stringify(send_data),
success : function(data) {
console.log(data);
}
});
이를 파이썬 코드로 변경하고싶으면 다음과 같이 작성하면된다.
import requests
import json
url = "https://example.com/test.do"
send_data = {
"key1": "value1",
"key2": "value2"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, data=json.dumps(send_data), headers=headers)
if response.status_code == 200:
print(response.json())
else:
print("Request failed with status:", response.status_code)
그런데, 가끔 post 요청을 보낼때 encodeURIComponent를 해서 보내는 경우가 있다.
encodeURIComponent를 사용하는 이유는 데이터를 URL-safe 포맷으로 변환하여 전송하기 위해서인데, 주로 다음과 같은 이유에서 사용한다.
1. 특수 문자의 인코딩 URL이나 쿼리 문자열에 사용될 수 없는 특수 문자(예: &, =, ?, #, 공백 등)를 포함한 데이터를 안전하게 전송하기 위해서
2. URL 인코딩 요구사항을 맞추기 위해 서버나 특정 API가 URL-safe 인코딩된 데이터를 요구하는 경우가 있어서
3. 쿼리 문자열로 전달할 때의 안전성 확보 만약 JSON 데이터를 쿼리 문자열로 GET 요청이나 x-www-form-urlencoded POST 요청에 포함시킨다면, 인코딩하지 않으면 예상치 못한 쿼리 파라미터 구분이나 값의 잘림 등이 발생할 수 있어서
그래서 다음과 같이 encodeURIComonent로 json데이터를 stringfy하여 보내는 경우가 있는데
$.ajax({
url : "/test.do",
type : "POST",
dataType : "JSON",
data : "json=" + encodeURIComponent(JSON.stringify(send_data)),
success : function(data) {
console.log(data);
}
});
이런 경우 개발자도구로 확인해보면 payload부분에 다음과 같이 찍힌다.
json=%7B%22...
이를 위와 같은 파이썬 코드로 보내면 서버에서 인식을 하지 못하기 때문에 javascript와 같은 방식으로 파이썬을 수정해주어야한다.
import requests
import json
import urllib.parse
url = "https://example.com/test.do"
send_data = {
"key1": "value1",
"key2": "value2"
}
encoded_data = "json=" + urllib.parse.quote(json.dumps(send_data))
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.post(url, data=encoded_data, headers=headers)
if response.status_code == 200:
print(response.json())
else:
print("Request failed with status:", response.status_code)
728x90
반응형
'ETC > Python' 카테고리의 다른 글
네이버 증권 파이썬(Python)을 이용하여 주식 정보 크롤링하기(Request, BeautifulSoup) 2편 (2) | 2024.10.28 |
---|---|
네이버 증권 파이썬(Python)을 이용하여 주식 정보 크롤링하기(Request, BeautifulSoup) 1편 (1) | 2024.10.28 |
파이썬 UUID 생성(uuid) 방법 How to generate uuid in python code (0) | 2024.10.22 |
(Python) 웹 페이지 모든 이미지 로컬 PC에 저장하기(BS4, Request, Image) (0) | 2024.10.18 |
CryptoJS AES Encrypt Python Version (2) | 2024.10.16 |