【问题标题】:Cant loop the process in certain area - python无法在某些区域循环进程 - python
【发布时间】:2021-07-30 20:35:05
【问题描述】:

我是 python 的新手,被困在这... number 。成功搜索后,它会给我们再次搜索的选项。当输入代码exit时,我遇到的问题是无效的手机号码,无效的响应内容长度是160,所以我们可以很容易地找出无效的请求内容长度,所以我将响应内容长度存储在 z3 变量 中。有什么方法可以检查内容长度是否等于 160 它将打印 data not found 并让我们有机会再次搜索并发送回这一行 @987654322 @ .如果 content-length 小于 160 它将获取我在代码中编写的数据 有效和无效的响应主体也不同 这是一个有效的响应正文: {"success":true,"data":{"acc_title":"Elon Musk"}} 而无效的: {"success":false,"msg":"Sorry, unable to find beneficiary. This is not a customer account","log":""}

代码如下:

from rich.console import Console
from rich.table import Table
from rich import print
import requests

p = True

while p == True:

    num = input ("Enter the mobile number :")
    x = num
    data = {'account_type': '11' ,'account_no': x } 

    cookies = {'token': '121212ad2122sdsd2323asas12312'}
    response = requests.post('https://pytest.com/api/user/get_user_info/', data , cookies=cookies) 

    z1 = response.json()
    z2 = response.headers
    z3 = z2["Content-Length"]
    z4 = z1["data"]
    z5 = z4["acc_title"]

    table = Table(title="[+] Found [+]", style="bold")
    table.add_column("Name", justify="right", style="cyan", no_wrap=True)
    table.add_row( z5 )
    console = Console()
    console.print(table)
    
    answer = input("want to search again? ")
    if answer == "yes":
            continue
    else:
        exit()

需要你的帮助 谢谢

【问题讨论】:

  • 对于每个无效请求的内容长度都是固定的160
  • 您的问题是什么?你看到我上面分享的链接了吗?
  • 是的,我看到了你分享的链接,我的问题是如果 z3 变量是 content-length 给我们的值 160 它会打印我们 data not找到并再次转到此行num = input ("Enter the mobile number :")
  • 找到z3if z3 == 160: continue后添加这一行

标签: python python-3.x loops if-statement


【解决方案1】:

编辑: 基于下面的 cmets,我更改了建议的代码,因此它检查分配给 z1 的 json 值。 (这包含一个成功值,它返回 True 或 False。)

from rich.console import Console
from rich.table import Table
from rich import print
import requests

p = True

while p == True:

    num = input("Enter the mobile number :")
    x = num
    data = {'account_type': '11', 'account_no': x}

    cookies = {'token': '121212ad2122sdsd2323asas12312'}
    response = requests.post('https://pytest.com/api/user/get_user_info/', data, cookies=cookies)

    z1 = response.json()
    z2 = response.headers
    if z1['success'] == False:
        print('Data not found.')
    else:
        z4 = z1["data"]
        z5 = z4["acc_title"]

        table = Table(title="[+] Found [+]", style="bold")
        table.add_column("Name", justify="right", style="cyan", no_wrap=True)
        table.add_row(z5)
        console = Console()
        console.print(table)

        answer = input("want to search again? ")
        if answer == "yes":
            continue
        else:
            exit()

【讨论】:

  • 有一个问题,有效和无效的响应正文不同。 "data" 和 "acc_title" 在有效的响应正文中找到,在无效的响应正文中没有类似的东西,这是一个有效的响应正文:{"success":true,"data":{"acc_title":"Elon Musk"}} 和一个无效的:{"success":false,"msg":"Sorry, unable to find beneficiary. This is not a customer account","log":""}
  • 如果条件 if z3 == 160: 为 true ,我们需要发送回 num = input("Enter the mobile number :") 的内容。我的错,也许我不能正确地阐述这个问题
  • 在我建议的代码中,检查 z3==160 是否为真,如果是,则打印。因为此检查发生在您的 while p == True: 内,所以代码将跳过 else: 中的其余代码并返回到 while p == True 的顶部,从那里重新开始。 --> 这个新循环将从 num = input("输入手机号码:")开始
  • 当我输入一个无效数字时,它会显示此错误File "uuu.py", line 23, in <module> z4 = z1["data"] KeyError: 'data'
  • 好的。原因是检查 == 160,不是 160 长,因此检查失败。我正在发布对代码的编辑,它使用了您第一条评论中的 json。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多