从Web应用程序检索数据 - POST请求

时间:2015-08-03 03:34:57

标签: javascript django

假设你有一个网络应用程序,让我们说一个Django应用程序。

您需要从位于另一个远程网站上的javascript按钮检索数据。

喜欢这个cne Consulte sus Datos Registro Electoral 部分,您会看到有一个按钮可以搜索给定的数字。

附加了此功能:

<form name="formulario_rep" method="post" action="javascript:BuscaRE_CE(document.formulario_rep.nacionalidad.value, document.formulario_rep.cedula.value)">
    <table class="consulta_re" cellpadding="0" cellspacing="0">
    <tbody><tr>
        <td colspan="2" align="center" class="titulo_consulta_re">Consulte sus Datos</td>
    </tr>
    <tr>
        <td colspan="2" align="center" class="subtitulo_consulta_re">Registro Electoral</td>
    </tr>

            <tr>
        <td width="20" align="right">
            <select name="nacionalidad" class="formulario">
            <option value="V">V</option>
            <option value="E">E</option>
            </select>
        </td>
        <td width="32" align="left">
            <input name="cedula" type="text" class="formulario" maxlength="8" size="8" value="Cédula" onfocus="javascript:clear_textbox2();" onblur="javascript:Validar_Numero(document.formulario_rep.cedula);">
        </td>
    </tr>
    <tr>
        <td colspan="2" align="center">
            <input type="submit" value="Buscar" class="boton">
        </td>
    </tr>
                    <tr><td height="8"></td></tr>
    </tbody></table>
    </form>

但是,我需要从Django模板加载它,假设我的模板中有另一个表单,当一个人在我的字段上放一个数字时,我需要从我的应用程序执行相同的请求,到远程表单,看看数字是否有效,有没有办法做到这一点?

修改

我有这个代码验证来自其他网站的数据:

def validate_vat(government_id, is_company):
    if government_id[0] == 'J' or government_id[0] == 'V':
        # Check on SENIATs page
        # TODO: What happens if this site is offline??
        url = 'http://contribuyente.seniat.gob.ve/getContribuyente/getrif?rif='
        s = requests.get(url + government_id).text
        if s.startswith('450'):
            raise ValidationError(_('ERROR: ' + s))

    elif is_company:
        raise ValidationError(_('Companies must provide VAT Numbers'))

    else:
        raise ValidationError(_("RIFs should start with either a "
                            "'J' or a 'V'"))

    return True

如果您转到this address并输入例如V147452787,那么网址将为new url

你看到那里显示的数据,我从django调用这个并且没有问题验证该字段,现在,我需要做同样的事情,但是使用来自cne网站的那个按钮。

我找到了这个网址:

Cne's empty url如果您添加this

等数据

然后你会看到一些信息,这就是我正在寻找的......

1 个答案:

答案 0 :(得分:1)

您必须更改验证功能。在第一个示例中,为了验证是否有结果,您在响应开头使用了字符串'450'来表示错误匹配。对于新网站,有更多的东西被发回给你,所以这只是测试差异的问题。

字符串'no se encuentra inscrita'的存在表示查找失败。示例代码如下。您可以将此摘录保存为文件,并在进行更改并集成到代码之前从控制台运行。

from __future__ import print_function
import requests

def validate(nationality, id):
    baseurl = 'http://www.cne.gob.ve/web/registro_electoral/ce.php'
    query_params = '?nacionalidad=%s&cedula=%s' % (nationality, id)
    url = baseurl + query_params
    print(url + ': ', end='')
    if nationality == 'V' or nationality == 'E':
        s = requests.get(url).text
        if 'no se encuentra inscrita' not in s:
            return True
    return False

print(validate('V', '13253891'))
print(validate('V', '132538911'))
print(validate('V', 'jhiw300'))
print(validate('E', '13253891'))
print(validate('E', '132538911'))
print(validate('E', 'jhiw300'))
print(validate('X', '13253891'))
print(validate('X', '132538911'))
print(validate('X', 'jhiw300'))