# Python

### pip

#### Instalando pip2

```python
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
sudo python2.7 get-pip.py
```

#### Atualizando o pip

```bash
python -m pip install -U pip
```

### Personalizando Cabeçalho nas Requisições

Quando for utilizar Python, sempre preecha o Headers para parecer um acesso realizado por humano e evitar erros como HTTP 403, como no exemplo abaixo:

```python
import requests

headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, sdch",
"Accept-Language": "en-US,en;q=0.8,es;q=0.6,sv;q=0.4",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Cookie": "_gauges_unique_hour=1; _gauges_unique_day=1; _gauges_unique_month=1; _gauges_unique_year=1; _gauges_unique=1",
"Host": "docs.python-requests.org",
"If-Modified-Since": "Wed, 03 Aug 2016 20:05:34 GMT",
"If-None-Match": 'W/"57a24e8e-e1f3"',
"Referer": "https://www.google.com/",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36"
}

req = requests.get("http://<site>.com", headers=headers)
print req.status_code
print req.text
```

Caso esteja recebendo erro de certificado ao fazer uma requisição via `requests`, utilize o seguinte modelo:

```python
import requests
requests.packages.urllib3.disable_warnings()
requests.get("http://<site>.com", verify=False)
```

###

### Proxy

Abaixo usamos o exemplo no ip loopback e na porta 8080, assim podemos usar o `Burp Suite` como proxy

```python
import os, requests
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:8080'

requests.get("https://site.com", verify=False)

# Ou
import requests
requests.get("http://site.com", proxies={'http':'http://localhost:8080'})
```

### Virtual Environment

```bash
python3 -m venv env
source ./env/bin/activate
python3 -m pip install -r requirements.txt
```

### Concatenando Strings em Variável

Esse script nada mais é, do que um simples concatenador de strings grandes. Isso pode ser útil em casos onde temos uma strings muito grande e precisamos que essa string seja dividida em várias linhas (porém na mesma variável).

```python
str = "minha string gigante....."

n = 50
for i in range(0, len(str), n):
	print "Str = Str + " + '"' + str[i:i+n] + '"'
```

### Debug (Terminal)

Permite ver e alterar valores de variáveis no meio da execução

```python
import pdb
x = 'Minha variavel'
pdb.set_trace()
```

### Erro egg\_info

Quando receber erro `Error: invalid command 'egg_info'. ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.`, execute:

```bash
pip install --upgrade setuptools
```

### Sites

```bash
# Lib IA
https://www.tensorflow.org/
https://scikit-learn.org/stable/
```
