javascript - 从 $.ajax 站点到 python3 服务器的 Cookie
问题描述
基本上我到处寻找答案(谷歌),我似乎找不到解决方案。基本上我正在做的是我有一个 python 服务器来抓取网站并将它们返回到 json 中的页面(取决于 url)。服务器从您输入要搜索的位置和要搜索的内容的站点获取 url。我想做的是在整个过程中添加 cookie,因为您可以登录某些网站以获得折扣。我想不通的是我应该如何将我的网站 cookie 发送到我的服务器。我正在使用简化的代码来测试/找出它是如何工作的。
网站网址: http://localhost/looking/test.html
服务器网址: http://localhost:8082
服务器请求示例: http://localhost:8082/?search=dell&shop=rlyniceshop
代码
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<meta charset="UTF-8">
</head>
<body>
<button type="button" class="btn btn-outline-success" data-where="ASWO">Prisijungti</button>
<script>
if (Cookies.get('user') == null) {
var user = Date.now();
Cookies.set('user', user);
console.log(Cookies.get('user'));
}
$('.btn-outline-success').on('click', function(){
var url = 'http://localhost:8082/?search=dell&shop=pls';
$.ajax({
url: url,
method: "POST",
cookie: "TestCookie2=AAA"
});
});
</script>
</body>
蟒蛇代码
from http.server import BaseHTTPRequestHandler, HTTPServer
from bs4 import BeautifulSoup
from urllib.parse import urlparse, parse_qs
import urllib.request
import json
import os
import re
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
crm_path="PATH TO CHROME DRIVER"
class Object:
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True)
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html; charset=utf-8')
self.send_header('Access-Control-Allow-Origin', '*')
self.end_headers()
parsed = urlparse(self.path)
wow = urllib.parse.parse_qs(parsed.query)
luk = ''.join(wow['search'])
wer = ''.join(wow['parde'])
print(luk+wer);
message = "COMPLEX JSON"
self.wfile.write(bytes(message, "utf8"))
return
def run():
print('starting server...')
server_address = ('127.0.0.1', 8082)
httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
print('running server...')
httpd.serve_forever()
run()
如果您认为我对某些事情不清楚,请询问。
解决方案
是的,所以我自己想通了。这也很容易做到。估计睡不好赶上我了。我所做的是创建一个新的var,cookie将存储在其中并将其作为数据发送。像这样:
var dat = Cookies.get()
$('.btn-outline-success').on('click', function(){
var url = 'http://localhost:8082/?search=dell&parde=pls';
$.ajax({
url: url,
method: "POST",
data: dat
});
});
然后使用get_POST从我的站点获取它们,如下所示:
def do_POST(self):
self.send_response(200)
self.send_header('Content-type','text/html; charset=utf-8')
self.send_header('Access-Control-Allow-Origin', 'http://localhost')
self.end_headers()
content_length = int(self.headers['Content-Length'])
body = self.rfile.read(content_length)
parsed_q = urlparse(self.path)
parsed_b = urlparse(body.decode("utf-8"))
search_info = urllib.parse.parse_qs(parsed_q.query)
user_info = urllib.parse.parse_qs(parsed_b.path)
#print(''.join(wow['search']));
print(search_info);
print(user_info);
message = "Json code"
self.wfile.write(bytes(message, "utf8"))
return
这样我可以保留我的标题并发送一些额外的数据(content_length)。我将 do_GET保存在python 代码中,只是为了将来我需要它。
我当前的代码现在看起来像这样:
PYTHON:
from http.server import BaseHTTPRequestHandler, HTTPServer
from bs4 import BeautifulSoup
from urllib.parse import urlparse, parse_qs
import urllib.request
import json
import os
import re
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
crm_path="C:\\Users\\Duma\\Desktop\\site\\BrowersDriver\\chromedriver.exe"
class Object:
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True)
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
self.send_response(200)
self.send_header('Content-type','text/html; charset=utf-8')
self.send_header('Access-Control-Allow-Origin', 'http://localhost')
self.end_headers()
content_length = int(self.headers['Content-Length'])
body = self.rfile.read(content_length)
parsed_q = urlparse(self.path)
parsed_b = urlparse(body.decode("utf-8"))
search_info = urllib.parse.parse_qs(parsed_q.query)
user_info = urllib.parse.parse_qs(parsed_b.path)
#print(''.join(wow['search']));
print(search_info);
print(user_info);
message = "Json code"
self.wfile.write(bytes(message, "utf8"))
return
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html; charset=utf-8')
self.send_header('Access-Control-Allow-Origin', '*')
self.end_headers()
message = "Nothing to see here."
self.wfile.write(bytes(message, "utf8"))
return
def run():
print('starting server...')
server_address = ('127.0.0.1', 8082)
httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
print('running server...')
httpd.serve_forever()
run()
HTML:
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<meta charset="UTF-8">
</head>
<body>
<button type="button" class="btn btn-outline-success" data-where="ASWO">Prisijungti</button>
<script>
if (Cookies.get('user') == null) {
var user = Date.now();
Cookies.set('user', user);
console.log(Cookies.get('user'));
}
var dat = Cookies.get()
$('.btn-outline-success').on('click', function(){
var url = 'http://localhost:8082/?search=dell&parde=pls';
$.ajax({
url: url,
method: "POST",
data: dat
});
});
</script>
</body>
</html>
我希望这对将来正在寻找类似东西的人有所帮助:)
推荐阅读
- yum - 使用 Centos 6 时,我无法再运行 'yum update',我收到此错误 'Cannot find a valid baseurl for repo: base'
- sql - 重新排序 SQL Server 表
- mariadb - Wildfly 22.0.1 无法使用 MariaDB 数据源部署 EAR
- c# - 将静态列表复制到本地临时列表
- python-3.x - pip 升级例外
- node.js - nodejs在登录时向所有页面显示用户名
- typescript - 访问器仅在针对 ECMAScript 5 及更高版本时可用 - 使用 TypeScript 时出现错误消息
- java - 识别冗余括号
- javascript - 如何将 HTML标签转换为 Base64 编码的图像文件?
- python - numpy 数组操作的问题