how to input data via a post request using requests in python

青春壹個敷衍的年華 提交于 2021-01-29 03:57:34

问题


What I'm trying to do: I am trying to automize the process of downloading YouTube videos using a particular website. The idea is that the website yields me the source of the video I had input and I download it. The website: https://en.savefrom.net/1-youtube-video-downloader-4/. Here is the input text field defined in the HTML:

<input type="text" name="sf_url" value="" autofocus="" placeholder="Paste your video link here" onfocus="if(this.value &amp;&amp; this.select){this.select()}" id="sf_url">

I tried:

import requests

payload = {"sf_url": "https://www.youtube.com/watch?v=jNQXAC9IVRw&vl=en"}
response = requests.post("https://en.savefrom.net/1-youtube-video-downloader-4/", payload)

print(response.text)

The source of the video is not included in the HTML, it does not work.

Question 1: How do I send data to an input field with a POST request? (how do I find the proper key, value pairs etc.)

Question 2: How do I find the key-value pairs for a POST request?


回答1:


After doing near half an hour of searching, I got the way to get the answer

Analysis start(The code is in the end):

at first you should make a POST request use this format

POST https://en.savefrom.net/savefrom.php
Accept: */*
Cache-Control: no-cache
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9,en;q=0.8
cache-control: no-cache
content-type: application/x-www-form-urlencoded
cookie: lang=en; country=CN; uid=fd94a82a406a8dd4; sfHelperDist=72; reference=14; clickads-e2=90; poropellerAdsPush-e=63; promoBlock=64; helperWidget=92; helperBanner=42; framelessHdConverter=68; inpagePush2=68; popupInOutput=9; _ga=GA1.2.799702638.1610248969; _gid=GA1.2.628904587.1610248969; PHPSESSID=4aojkm49oj7h3de65pekqii337; x-requested-with=; PHPSESSUD=122fb7e10af37e23d99e896fd188744f; _gat_helperWidget=1; _gat_inpagePush2=1
origin: https://en.savefrom.net
pragma: no-cache
referer: https://en.savefrom.net/1-youtube-video-downloader-4/
sec-ch-ua: "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"
sec-ch-ua-mobile: ?0
sec-fetch-dest: iframe
sec-fetch-mode: navigate
sec-fetch-site: same-origin
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36

sf_url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DjNQXAC9IVRw%26vl%3Den&sf_submit=&new=1&lang=en&app=&country=cn&os=Windows&browser=Chrome

make sure you change the sf_url parameter to your target youtube url

and then you can get a text(under encryption) like this

<html>
<head>
    <meta name="robots" content="noindex">
</head>
<body>
<script type="text/javascript">
    (function () {
        this._a = function (a, b, c, d, e) {
            var f = Array.prototype.slice.call(arguments, 4);
            return a ? b.apply(d, f) : c.apply(d, f)
        };
        this._b = function (a, b, c) {
            return a.apply(b, Array.prototype.slice.call(arguments, 2))
        };
        this._c = function (a) {
            return unescape(a)
        };
        this._d = function (a) {
            return a.split("").reverse().join("")
        };
        this._e = function (a, i, j) {
            a[i % a.length] = a.splice(j % a.length, 1, a[i % a.length])[0];
        };
        this._f = function (a, b) {
            a = a.split(".");
            for (var c = b, d; d = a.shift();) if (null != c[d]) c = c[d]; else return null;
            return c
        };
        this._g = function (a) {
            var b = typeof a;
            if ("object" == b) if (a) {
                if (a instanceof Array) return "array";
                if (a instanceof Object) return b;
                var c = Object.prototype.toString.call(a);
                if ("[object Window]" == c) return "object";
                if ("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) return "array";
                if ("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) return "function"
            } else return "null"; else if ("function" == b && "undefined" == typeof a.call) return "object";
            return b
        };
        this._h = function (a) {
            var b = parseInt(a);
            if (isNaN(b)) return parseInt(a, 16);
            return b;
        };
        this._i = function (d) {
            for (var b = "", c = 0; c < d.length; c++) {
                var a = d.charAt(c);
                this.chars[a] && (a = this.chars[a]);
                b += a
            }
            return b
        };
        this._j = function (a) {
            var b = "", e, c, h, f, g, d = 0, a = a.replace(/[^A-Za-z0-9\+\/\=]/g, "");
            64 == this.key.length && (this.key += "=");
            for (a += ["", "===", "==", "="][a.length % 4]; d < a.length;) e = this.key.indexOf(a.charAt(d++)), c = this.key.indexOf(a.charAt(d++)), f = this.key.indexOf(a.charAt(d++)), g = this.key.indexOf(a.charAt(d++)), e = e << 2 | c >> 4, c = (c & 15) << 4 | f >> 2, h = (f & 3) << 6 | g, b += String.fromCharCode(e), 64 != f && (b += String.fromCharCode(c)), 64 != g && (b += String.fromCharCode(h));
            return b
        };
        this._k = function (a, b) {
            b = a.length - b;
            return a.substr(b) + a.substr(0, b)
        };
        this._l = function (a, b) {
            var c = Array.prototype.slice.call(arguments, 1);
            return function () {
                var b = c.slice();
                b.push.apply(b, arguments);
                return a.apply(this, b)
            }
        };
        this._m = function (a, b) {
            return a.concat.apply(a, arguments)
        };
        this._n = function (a) {
            eval(a)
        };
        this._o = function (d) {
            for (var b = "", a = 0, c = c1 = c2 = 0; a < d.length;) c = d.charCodeAt(a), 128 > c ? (b += String.fromCharCode(c), a++) : 191 < c && 224 > c ? (c2 = d.charCodeAt(a + 1), b += String.fromCharCode((c & 31) << 6 | c2 & 63), a += 2) : (c2 = d.charCodeAt(a + 1), c3 = d.charCodeAt(a + 2), b += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63), a += 3);
            return b
        };
        this._p = function (a, b) {
            []["filter"]["constructor"](b).call(a);
        };
        this._q = function (a, b) {
            var c = a;
            a = b;
            b = c
        };
        this._r = function (a, i, v) {
            a[i] = v
        };

        $e = this;
        var $d = "owg12wA72nal9UBC9UBC9UBt9UBO9UBron/honGF9UBt9UBrmUBrmUBrmUBt9UBfX3/1bO/N0OBlZ6qjowmdXC/nowmj0SfsS70BoraMVrbMYURMTcRMRONy2Cm1B3eBXOgBo3RikOfsS7qjowm103NnkcRMV3B5kFqG9UBrm1BO9UBUZ3eBkF51ow0BkFehX1RMTrgMTnAd03YFS7fsS7h72nNdZ6ghX3/1bO/N0OBlZ6RjkF5FowXd03llS7YFS7asS7hsS7bsS7Gi03/nonGhoFbsS7asS7H1S7DsS7asS7ghX3/1bO/N0OBlZ6RjkF5FowXd03asS70jonaBEFfsS7asS70BoraMVrbMYURMTvRy2raMTraMYybMTraMYybMTraMVrgMTcRMYFIdkcRMYFRik35l9UBG9UBrE3559UBCowllS7Y1S7bsS7bsS7asS7H1S7asS7mDoCasS7Rd0FllS7YFS7llS7hsS7g12n91oFgd9UBz9UBCowllS7Y1S7hsS7fsS7IiknllS7llS7HFS7YFS7hsS7R72nfsS7W1kF51oraMYybMTraMYybMTraMYybMTraMVrgMTnN7EFH1S7g12n91oFgdHUBsmUBG9UBMoFRyEURMRrRMR1RMYF/N0CN1b201b1RMYcRMYFqio3BDoyBD0C5honqCXOqrZ3B72CahRFey03/F2raMVrgMVrgMTcRMYybMY3IiZ3l1S7RsS7G50URMRrRMY3IiZ3l1S7RsS7G1ZURMRrRMVURMV1gUZURMTrgMVURMVFR1ZURMRrRMTUaHSrgMVURMRnqBkFgjkwRsS7x7S7HiS7HFS7RsS7gz9nGiSUbGSnmMSUgt9UNr0Ubt9ngr01Bio197gU570URMTrgMVURMV3BAX3mjN30howRsS7x7S7HFS7RsS7RsS7l1S7RsS7g12CI10URMRrRMVURMYUmsxURMTrgMYF5N0OenkURMR3ByowX79UBHmUBs9UBMk3mBkFRsS7YFS7l1S7RsS7RyEF579UBUGUBO9UNtScbHmUBs9UBM0v/12nIB0nRsS7x7S7RsS7fH9URMTrgMVURMRn5y2wRsS7x7S7B1E35norgMVURMR3/yoF5jN3q79UBUGUBMXOId0nl1S7RsS7eBknNd0URMRrRMVURMYUms9URMTrgMVURMTvmBk35i2ORs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",
            $b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", $c = {
                "R": "A",
                "A": "R",
                "r": "a",
                "a": "r",
                "b": "n",
                "n": "b",
                "5": "u",
                "u": "5",
                "9": "8",
                "8": "9",
                "e": "x",
                "x": "e",
                "y": "P",
                "P": "y",
                "7": "Y",
                "Y": "7",
                "q": "m",
                "m": "q",
                "o": "+",
                "+": "o",
                "G": "p",
                "p": "G",
                "c": "\/",
                "\/": "c",
                "f": "F",
                "F": "f",
                "Z": "T",
                "T": "Z",
                "d": "4",
                "4": "d",
                "M": "w",
                "w": "M",
                "j": "V",
                "V": "j",
                "i": "l",
                "l": "i",
                "k": "U",
                "U": "k",
                "L": "B",
                "B": "L",
                "K": "O",
                "O": "K",
                "W": "2",
                "2": "W",
                "C": "D",
                "D": "C",
                "h": "s",
                "s": "h",
                "6": "t",
                "t": "6",
                "1": "H",
                "H": "1",
                "z": "0",
                "0": "z",
                "N": "3",
                "3": "N",
                "X": "J",
                "J": "X",
                "Q": "S",
                "S": "Q",
                "I": "v",
                "v": "I",
                "g": "E",
                "E": "g"
            };
        var $k = _i.call({chars: $c}, $b);
        var $a = _j.call({key: $k}, "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");
        this.$d = $d;
        this.$b = $b;
        this.$c = $c;
        this.$k = $k;
        this.$a = $a;
        $a = _c($a);
        $a = _o($a);
        _p.apply($e, [$e, $a]);
    })();
</script>
</body>
</html>

if you enter this page now, you will see nothing

thus, we should decrypt this text

the answer is hided in last few line of this code

like this

...
$a = _c($a);
$a = _o($a);
...

so in this case, the _c($a) is the decrypt function and _o($a) is the encrypt one

and in other case, the code may like this

...
$d = _e($d);
$d = _j($d);
...

so the decrypt function in this case is _e($d), _j($d) is encryption

thus, in this case, after we use the _c($a) in the console, the result text is the decrypt text like this

(function(){
function del(){while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}};
if(window.location.hostname.search(/(?:^|\.|@)(savefrom\.net|sfrom\.net|savefrom\.com\.au|147\.135\.223\.128|(?:fe\d*|test)-front\.sf-apps\.com)$/i) == -1)
{
alert('Please go to http://savefrom.net/ to get direct links');
del();
return;
}

function showResult(){
var success = false;
try
{
var d = window.parent.document;
if(d && d.getElementById)
{
var e = d.getElementById('sf_result');
if(e && e.innerHTML)
{
window.parent.sf.finishRequest(true);;
e.innerHTML = '';
window.parent.sf.videoResult.show({"id":"jNQXAC9IVRw","cipher":false,"meta":{"title":"Me at the zoo","source":"https:\/\/www.youtube.com\/watch?v=jNQXAC9IVRw","duration":"0:19","tags":"me at the zoo,jawed karim,first youtube video","subtitle":{"token":"cfcb94426152cf59cb4139fff33ac957","language":["en"]}},"thumb":"https:\/\/i.ytimg.com\/vi\/jNQXAC9IVRw\/hqdefault.jpg","itags":["18","133","140","160","242","249","250","251","278","394","395"],"video_quality":["240","144"],"url":[{"url":"https:\/\/r2---sn-2uuxa3vh-230e.googlevideo.com\/videoplayback?expire=1610272446&ei=Xnr6X4GRE7HJ4-EP2_aluAE&ip=36.68.35.229&id=o-AJmp6N02GLwhuSs8TgmiMVrSs0PH0SPhFwrj_J0gq8hZ&itag=18&source=youtube&requiressl=yes&mh=VD&mm=31%2C29&mn=sn-2uuxa3vh-230e%2Csn-npoe7nek&ms=au%2Crdu&mv=m&mvi=2&pl=21&initcwndbps=306250&vprv=1&mime=video%2Fmp4&ns=yCO9T2W7YMUD3s7rLaJgvE4F&gir=yes&clen=790527&ratebypass=yes&dur=18.993&lmt=1524502661914999&mt=1610250510&fvip=2&c=WEB&n=6JAfI9JZ12N5Iw&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAIScJy8-hGMBklAiO5RLNTQzefnRw44uda_t_x0Ak9NGAiEA9dz6yqVB-4qOInY8EUOFYWwsqWNu_qlDcRNf3FfgpnM%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRAIgIMdxrO7Sxk4mK9upDOC32ZGI22mten0zM04v3YsE4DICICQ5qvWidCywY0kTMCf4kFIWY73pz8_Z55X6tuGDjMUm","name":"MP4","subname":"240","info_url":"https:\/\/r2---sn-2uuxa3vh-230e.googlevideo.com\/videoplayback?expire=1610272446&ei=Xnr6X4GRE7HJ4-EP2_aluAE&ip=36.68.35.229&id=o-AJmp6N02GLwhuSs8TgmiMVrSs0PH0SPhFwrj_J0gq8hZ&itag=18&source=youtube&requiressl=yes&mh=VD&mm=31%2C29&mn=sn-2uuxa3vh-230e%2Csn-npoe7nek&ms=au%2Crdu&mv=m&mvi=2&pl=21&initcwndbps=306250&vprv=1&mime=video%2Fmp4&ns=yCO9T2W7YMUD3s7rLaJgvE4F&gir=yes&clen=790527&ratebypass=yes&dur=18.993&lmt=1524502661914999&mt=1610250510&fvip=2&c=WEB&n=6JAfI9JZ12N5Iw&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAIScJy8-hGMBklAiO5RLNTQzefnRw44uda_t_x0Ak9NGAiEA9dz6yqVB-4qOInY8EUOFYWwsqWNu_qlDcRNf3FfgpnM%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRAIgIMdxrO7Sxk4mK9upDOC32ZGI22mten0zM04v3YsE4DICICQ5qvWidCywY0kTMCf4kFIWY73pz8_Z55X6tuGDjMUm","type":"mp4","ext":"mp4","downloadable":false,"quality":"240","audio":false,"no_audio":false,"itag":"18","filesize":790527,"attr":{"title":"video format: 240","class":""},"info_token":"ba32c5ee6d3f072d5203154e9715df83"}],"hosting":101,"srv":"s36","sd":null,"hd":null});;
window.parent.sf.enableElement('sf_submit', true);
success=true;
}
}
}
catch(err){}

del();
if(!success)
{
var alt = '';
if(alt) alert(alt);
}
}

try {
if (typeof navigator.permissions != 'undefined') {
navigator.permissions.query({name:'notifications'}).then(function(permissionStatus) {
if(Notification.permission === 'denied' && permissionStatus.state === 'prompt') {
} else {
showResult();
}
});
} else {
showResult();
}
}
catch (err) {
showResult();
}
})();

And you can see the url in this fragment(near the line 22) is our target url

...
,"url":[{"url":"https:\/\/r2---sn-2uuxa3vh-230e.googlevideo.com\/videoplayback?expire=1610272446&ei=Xnr6X4GRE7HJ4-EP2_aluAE&ip=36.68.35.229&id=o-AJmp6N02GLwhuSs8TgmiMVrSs0PH0SPhFwrj_J0gq8hZ&itag=18&source=youtube&requiressl=yes&mh=VD&mm=31%2C29&mn=sn-2uuxa3vh-230e%2Csn-npoe7nek&ms=au%2Crdu&mv=m&mvi=2&pl=21&initcwndbps=306250&vprv=1&mime=video%2Fmp4&ns=yCO9T2W7YMUD3s7rLaJgvE4F&gir=yes&clen=790527&ratebypass=yes&dur=18.993&lmt=1524502661914999&mt=1610250510&fvip=2&c=WEB&n=6JAfI9JZ12N5Iw&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAIScJy8-hGMBklAiO5RLNTQzefnRw44uda_t_x0Ak9NGAiEA9dz6yqVB-4qOInY8EUOFYWwsqWNu_qlDcRNf3FfgpnM%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRAIgIMdxrO7Sxk4mK9upDOC32ZGI22mten0zM04v3YsE4DICICQ5qvWidCywY0kTMCf4kFIWY73pz8_Z55X6tuGDjMUm","name":"MP4",
...

FINALLY, I finish it!!!(maybe after 4 hours)

here is my solution(uh nearly 100 line)

# -*- coding: utf-8 -*-
# @Time: 2021/1/10
# @Author: Eritque arcus
# @File: Youtube.py
# @License: MIT
# @Environment:
#           - windows 10
#           - python 3.6.2
# @Dependence:
#           - jsdom in npm(windows also can use)
#           - requests, execjs, re, json in python
import requests
import execjs
import re
import json


def gethtml(url):
    # set the headers or the website will not return information
    # the cookies in here you may need to change
    headers = {
        "cache-Control": "no-cache",
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,"
                  "*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "accept-encoding": "gzip, deflate, br",
        "accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
        "content-type": "application/x-www-form-urlencoded",
        "cookie": "lang=en; country=CN; uid=fd94a82a406a8dd4; sfHelperDist=72; reference=14; "
                  "clickads-e2=90; poropellerAdsPush-e=63; promoBlock=64; helperWidget=92; "
                  "helperBanner=42; framelessHdConverter=68; inpagePush2=68; popupInOutput=9; "
                  "_ga=GA1.2.799702638.1610248969; _gid=GA1.2.628904587.1610248969; "
                  "PHPSESSID=030393eb0776d20d0975f99b523a70d4; x-requested-with=; "
                  "PHPSESSUD=islilfjn5alth33j9j8glj9776; _gat_helperWidget=1; _gat_inpagePush2=1",
        "origin": "https://en.savefrom.net",
        "pragma": "no-cache",
        "referer": "https://en.savefrom.net/1-youtube-video-downloader-4/",
        "sec-ch-ua": "\"Google Chrome\";v=\"87\", \"Not;A Brand\";v=\"99\",\"Chromium\";v=\"87\"",
        "sec-ch-ua-mobile": "?0",
        "sec-fetch-dest": "iframe",
        "sec-fetch-mode": "navigate",
        "sec-fetch-site": "same-origin",
        "sec-fetch-user": "?1",
        "upgrade-insecure-requests": "1",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/87.0.4280.88 Safari/537.36"}
    # set the parameter, we can get from chrome
    kv = {"sf_url": url,
          "sf_submit": "",
          "new": "1",
          "lang": "en",
          "app": "",
          "country": "cn",
          "os": "Windows",
          "browser": "Chrome"}
    # do the POST request
    r = requests.post(url="https://en.savefrom.net/savefrom.php", headers=headers,
                      data=kv)
    r.raise_for_status()
    # get the result
    return r.text


if __name__ == '__main__':
    # target(youtube address) url
    url = "https://www.youtube.com/watch?v=YPvtz1lHRiw"
    # get the target text
    reo = gethtml(url)
    # Remove the code from the head and tail (we need the javascript part, information store with encryption in js part)
    reo = reo.split("<script type=\"text/javascript\">")[1].split("</script>")[0]
    # override the alert function, because in the code there has one place using
    # and we cannot do the alerting in execjs(it is meaningless) however, if we donnot override, the code will raise a error
    reo = reo.replace("(function(){", "(function(){\nthis.alert=function(){};")
    # split each line(help us find the decrypt function in last few line)
    reA = reo.split("\n")
    # get the depcrypt function
    name = reA[len(reA) - 3].split(";")[0] + ";"
    # add jsdom into the execjs because the code will use(maybe there is a solution without jsdom, but i have no idea)
    addition = """
    const jsdom = require("jsdom");
    const { JSDOM } = jsdom;
    const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
    window = dom.window;
    document = window.document;
    XMLHttpRequest = window.XMLHttpRequest;
    """
    # use execjs to execute the js code, and the cwd is the result of `npm root -g`(the path of npm in your computer)
    ct = execjs.compile(addition + reo, cwd=r'C:\Users\19308\AppData\Roaming\npm\node_modules')
    # do the decryption
    text = ct.eval(name.split("=")[1].replace(";", ""))
    # get the result in json
    result = re.search('show\((.*?)\);;', text, re.I | re.M).group(0).replace("show(", "").replace(");;", "")
    # use `json` to load json
    j = json.loads(result)
    # the selection of video(in this case, num=1 mean the video is
    # - 360p known from j["url"][num]["quality"]
    # - MP4 known from j["url"][num]["type"]
    # - audio known from j["url"][num]["audio"]
    num = 1
    downurl = j["url"][num]["url"]
    # do some download
    # thanks :)
    # - EOF -

And, be careful about this(in https://en.savefrom.net/terms.html #Your Use of the Website and Services#)

You agree not to access (or attempt to access) the Services by any means other than through the means provided by SaveFrom or its authorized partners. You agree not to access (or attempt to access) the Services by way of automated means and that you will not engage in any activity that interferes with or disrupts the Services (or the servers and networks which are connected to the Services).



来源:https://stackoverflow.com/questions/65443895/how-to-input-data-via-a-post-request-using-requests-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!